Merge pull request #72824 from home-assistant/rc

This commit is contained in:
Franck Nijhof 2022-06-01 15:21:30 +02:00 committed by GitHub
commit 3d75b0776f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5288 changed files with 68527 additions and 38623 deletions

View File

@ -48,6 +48,7 @@ base_platforms: &base_platforms
components: &components components: &components
- homeassistant/components/alert/** - homeassistant/components/alert/**
- homeassistant/components/alexa/** - homeassistant/components/alexa/**
- homeassistant/components/application_credentials/**
- homeassistant/components/auth/** - homeassistant/components/auth/**
- homeassistant/components/automation/** - homeassistant/components/automation/**
- homeassistant/components/backup/** - homeassistant/components/backup/**

View File

@ -1,6 +1,5 @@
[run] [run]
source = homeassistant source = homeassistant
omit = omit =
homeassistant/__main__.py homeassistant/__main__.py
homeassistant/helpers/signal.py homeassistant/helpers/signal.py
@ -42,7 +41,6 @@ omit =
homeassistant/components/airtouch4/const.py homeassistant/components/airtouch4/const.py
homeassistant/components/airvisual/__init__.py homeassistant/components/airvisual/__init__.py
homeassistant/components/airvisual/sensor.py homeassistant/components/airvisual/sensor.py
homeassistant/components/aladdin_connect/*
homeassistant/components/alarmdecoder/__init__.py homeassistant/components/alarmdecoder/__init__.py
homeassistant/components/alarmdecoder/alarm_control_panel.py homeassistant/components/alarmdecoder/alarm_control_panel.py
homeassistant/components/alarmdecoder/binary_sensor.py homeassistant/components/alarmdecoder/binary_sensor.py
@ -58,7 +56,6 @@ omit =
homeassistant/components/amcrest/* homeassistant/components/amcrest/*
homeassistant/components/ampio/* homeassistant/components/ampio/*
homeassistant/components/android_ip_webcam/* homeassistant/components/android_ip_webcam/*
homeassistant/components/androidtv/__init__.py
homeassistant/components/androidtv/diagnostics.py homeassistant/components/androidtv/diagnostics.py
homeassistant/components/anel_pwrctrl/switch.py homeassistant/components/anel_pwrctrl/switch.py
homeassistant/components/anthemav/media_player.py homeassistant/components/anthemav/media_player.py
@ -96,6 +93,14 @@ omit =
homeassistant/components/azure_devops/const.py homeassistant/components/azure_devops/const.py
homeassistant/components/azure_devops/sensor.py homeassistant/components/azure_devops/sensor.py
homeassistant/components/azure_service_bus/* homeassistant/components/azure_service_bus/*
homeassistant/components/baf/__init__.py
homeassistant/components/baf/climate.py
homeassistant/components/baf/entity.py
homeassistant/components/baf/fan.py
homeassistant/components/baf/light.py
homeassistant/components/baf/number.py
homeassistant/components/baf/sensor.py
homeassistant/components/baf/switch.py
homeassistant/components/baidu/tts.py homeassistant/components/baidu/tts.py
homeassistant/components/balboa/__init__.py homeassistant/components/balboa/__init__.py
homeassistant/components/beewi_smartclim/sensor.py homeassistant/components/beewi_smartclim/sensor.py
@ -205,12 +210,9 @@ omit =
homeassistant/components/denonavr/media_player.py homeassistant/components/denonavr/media_player.py
homeassistant/components/denonavr/receiver.py homeassistant/components/denonavr/receiver.py
homeassistant/components/deutsche_bahn/sensor.py homeassistant/components/deutsche_bahn/sensor.py
homeassistant/components/devolo_home_control/climate.py
homeassistant/components/devolo_home_control/const.py
homeassistant/components/devolo_home_control/cover.py homeassistant/components/devolo_home_control/cover.py
homeassistant/components/devolo_home_control/light.py homeassistant/components/devolo_home_control/light.py
homeassistant/components/devolo_home_control/sensor.py homeassistant/components/devolo_home_control/sensor.py
homeassistant/components/devolo_home_control/subscriber.py
homeassistant/components/devolo_home_control/switch.py homeassistant/components/devolo_home_control/switch.py
homeassistant/components/digital_ocean/* homeassistant/components/digital_ocean/*
homeassistant/components/discogs/sensor.py homeassistant/components/discogs/sensor.py
@ -313,6 +315,7 @@ omit =
homeassistant/components/esphome/fan.py homeassistant/components/esphome/fan.py
homeassistant/components/esphome/light.py homeassistant/components/esphome/light.py
homeassistant/components/esphome/lock.py homeassistant/components/esphome/lock.py
homeassistant/components/esphome/media_player.py
homeassistant/components/esphome/number.py homeassistant/components/esphome/number.py
homeassistant/components/esphome/select.py homeassistant/components/esphome/select.py
homeassistant/components/esphome/sensor.py homeassistant/components/esphome/sensor.py
@ -412,6 +415,11 @@ omit =
homeassistant/components/garages_amsterdam/sensor.py homeassistant/components/garages_amsterdam/sensor.py
homeassistant/components/gc100/* homeassistant/components/gc100/*
homeassistant/components/geniushub/* homeassistant/components/geniushub/*
homeassistant/components/geocaching/__init__.py
homeassistant/components/geocaching/const.py
homeassistant/components/geocaching/coordinator.py
homeassistant/components/geocaching/oauth.py
homeassistant/components/geocaching/sensor.py
homeassistant/components/github/__init__.py homeassistant/components/github/__init__.py
homeassistant/components/github/coordinator.py homeassistant/components/github/coordinator.py
homeassistant/components/github/sensor.py homeassistant/components/github/sensor.py
@ -483,7 +491,6 @@ omit =
homeassistant/components/homematic/* homeassistant/components/homematic/*
homeassistant/components/home_plus_control/api.py homeassistant/components/home_plus_control/api.py
homeassistant/components/home_plus_control/switch.py homeassistant/components/home_plus_control/switch.py
homeassistant/components/homewizard/diagnostics.py
homeassistant/components/homeworks/* homeassistant/components/homeworks/*
homeassistant/components/honeywell/__init__.py homeassistant/components/honeywell/__init__.py
homeassistant/components/honeywell/climate.py homeassistant/components/honeywell/climate.py
@ -506,6 +513,7 @@ omit =
homeassistant/components/hvv_departures/__init__.py homeassistant/components/hvv_departures/__init__.py
homeassistant/components/hydrawise/* homeassistant/components/hydrawise/*
homeassistant/components/ialarm/alarm_control_panel.py homeassistant/components/ialarm/alarm_control_panel.py
homeassistant/components/ialarm_xr/alarm_control_panel.py
homeassistant/components/iammeter/sensor.py homeassistant/components/iammeter/sensor.py
homeassistant/components/iaqualink/binary_sensor.py homeassistant/components/iaqualink/binary_sensor.py
homeassistant/components/iaqualink/climate.py homeassistant/components/iaqualink/climate.py
@ -542,6 +550,7 @@ omit =
homeassistant/components/intellifire/coordinator.py homeassistant/components/intellifire/coordinator.py
homeassistant/components/intellifire/binary_sensor.py homeassistant/components/intellifire/binary_sensor.py
homeassistant/components/intellifire/sensor.py homeassistant/components/intellifire/sensor.py
homeassistant/components/intellifire/switch.py
homeassistant/components/intellifire/entity.py homeassistant/components/intellifire/entity.py
homeassistant/components/incomfort/* homeassistant/components/incomfort/*
homeassistant/components/intesishome/* homeassistant/components/intesishome/*
@ -575,6 +584,7 @@ omit =
homeassistant/components/juicenet/const.py homeassistant/components/juicenet/const.py
homeassistant/components/juicenet/device.py homeassistant/components/juicenet/device.py
homeassistant/components/juicenet/entity.py homeassistant/components/juicenet/entity.py
homeassistant/components/juicenet/number.py
homeassistant/components/juicenet/sensor.py homeassistant/components/juicenet/sensor.py
homeassistant/components/juicenet/switch.py homeassistant/components/juicenet/switch.py
homeassistant/components/kaiterra/* homeassistant/components/kaiterra/*
@ -716,8 +726,10 @@ omit =
homeassistant/components/modem_callerid/button.py homeassistant/components/modem_callerid/button.py
homeassistant/components/modem_callerid/sensor.py homeassistant/components/modem_callerid/sensor.py
homeassistant/components/moehlenhoff_alpha2/__init__.py homeassistant/components/moehlenhoff_alpha2/__init__.py
homeassistant/components/moehlenhoff_alpha2/binary_sensor.py
homeassistant/components/moehlenhoff_alpha2/climate.py homeassistant/components/moehlenhoff_alpha2/climate.py
homeassistant/components/moehlenhoff_alpha2/const.py homeassistant/components/moehlenhoff_alpha2/const.py
homeassistant/components/moehlenhoff_alpha2/sensor.py
homeassistant/components/motion_blinds/__init__.py homeassistant/components/motion_blinds/__init__.py
homeassistant/components/motion_blinds/const.py homeassistant/components/motion_blinds/const.py
homeassistant/components/motion_blinds/cover.py homeassistant/components/motion_blinds/cover.py
@ -953,6 +965,7 @@ omit =
homeassistant/components/rainmachine/model.py homeassistant/components/rainmachine/model.py
homeassistant/components/rainmachine/sensor.py homeassistant/components/rainmachine/sensor.py
homeassistant/components/rainmachine/switch.py homeassistant/components/rainmachine/switch.py
homeassistant/components/rainmachine/util.py
homeassistant/components/raspyrfm/* homeassistant/components/raspyrfm/*
homeassistant/components/recollect_waste/__init__.py homeassistant/components/recollect_waste/__init__.py
homeassistant/components/recollect_waste/sensor.py homeassistant/components/recollect_waste/sensor.py
@ -988,7 +1001,6 @@ omit =
homeassistant/components/route53/* homeassistant/components/route53/*
homeassistant/components/rova/sensor.py homeassistant/components/rova/sensor.py
homeassistant/components/rpi_camera/* homeassistant/components/rpi_camera/*
homeassistant/components/rpi_gpio/*
homeassistant/components/rtorrent/sensor.py homeassistant/components/rtorrent/sensor.py
homeassistant/components/russound_rio/media_player.py homeassistant/components/russound_rio/media_player.py
homeassistant/components/russound_rnet/media_player.py homeassistant/components/russound_rnet/media_player.py
@ -1018,16 +1030,6 @@ omit =
homeassistant/components/senseme/fan.py homeassistant/components/senseme/fan.py
homeassistant/components/senseme/light.py homeassistant/components/senseme/light.py
homeassistant/components/senseme/switch.py homeassistant/components/senseme/switch.py
homeassistant/components/sensibo/__init__.py
homeassistant/components/sensibo/binary_sensor.py
homeassistant/components/sensibo/climate.py
homeassistant/components/sensibo/coordinator.py
homeassistant/components/sensibo/diagnostics.py
homeassistant/components/sensibo/entity.py
homeassistant/components/sensibo/number.py
homeassistant/components/sensibo/select.py
homeassistant/components/sensibo/sensor.py
homeassistant/components/sensibo/update.py
homeassistant/components/senz/__init__.py homeassistant/components/senz/__init__.py
homeassistant/components/senz/api.py homeassistant/components/senz/api.py
homeassistant/components/senz/climate.py homeassistant/components/senz/climate.py
@ -1058,6 +1060,7 @@ omit =
homeassistant/components/sky_hub/* homeassistant/components/sky_hub/*
homeassistant/components/skybeacon/sensor.py homeassistant/components/skybeacon/sensor.py
homeassistant/components/skybell/* homeassistant/components/skybell/*
homeassistant/components/slack/__init__.py
homeassistant/components/slack/notify.py homeassistant/components/slack/notify.py
homeassistant/components/sia/__init__.py homeassistant/components/sia/__init__.py
homeassistant/components/sia/alarm_control_panel.py homeassistant/components/sia/alarm_control_panel.py
@ -1470,6 +1473,15 @@ omit =
homeassistant/components/yandex_transport/* homeassistant/components/yandex_transport/*
homeassistant/components/yeelightsunflower/light.py homeassistant/components/yeelightsunflower/light.py
homeassistant/components/yi/camera.py homeassistant/components/yi/camera.py
homeassistant/components/yolink/__init__.py
homeassistant/components/yolink/api.py
homeassistant/components/yolink/binary_sensor.py
homeassistant/components/yolink/const.py
homeassistant/components/yolink/coordinator.py
homeassistant/components/yolink/entity.py
homeassistant/components/yolink/sensor.py
homeassistant/components/yolink/siren.py
homeassistant/components/yolink/switch.py
homeassistant/components/youless/__init__.py homeassistant/components/youless/__init__.py
homeassistant/components/youless/const.py homeassistant/components/youless/const.py
homeassistant/components/youless/sensor.py homeassistant/components/youless/sensor.py

View File

@ -16,7 +16,7 @@
<!-- <!--
Provide details about the versions you are using, which helps us to reproduce Provide details about the versions you are using, which helps us to reproduce
and find the issue quicker. Version information is found in the and find the issue quicker. Version information is found in the
Home Assistant frontend: Configuration -> Info. Home Assistant frontend: Settings -> About.
--> -->
- Home Assistant Core release with the issue: - Home Assistant Core release with the issue:

View File

@ -31,7 +31,7 @@ body:
label: What version of Home Assistant Core has the issue? label: What version of Home Assistant Core has the issue?
placeholder: core- placeholder: core-
description: > description: >
Can be found in: [Configuration panel -> Info](https://my.home-assistant.io/redirect/info/). Can be found in: [Settings -> About](https://my.home-assistant.io/redirect/info/).
[![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/) [![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/)
- type: input - type: input
@ -46,7 +46,7 @@ body:
attributes: attributes:
label: What type of installation are you running? label: What type of installation are you running?
description: > description: >
Can be found in: [Configuration panel -> Info](https://my.home-assistant.io/redirect/info/). Can be found in: [Settings -> About](https://my.home-assistant.io/redirect/info/).
[![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/) [![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/)
options: options:

View File

@ -122,13 +122,13 @@ jobs:
echo "${{ github.sha }};${{ github.ref }};${{ github.event_name }};${{ github.actor }}" > rootfs/OFFICIAL_IMAGE echo "${{ github.sha }};${{ github.ref }};${{ github.event_name }};${{ github.actor }}" > rootfs/OFFICIAL_IMAGE
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v1.14.1 uses: docker/login-action@v2.0.0
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v1.14.1 uses: docker/login-action@v2.0.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
@ -187,13 +187,13 @@ jobs:
fi fi
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v1.14.1 uses: docker/login-action@v2.0.0
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v1.14.1 uses: docker/login-action@v2.0.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
@ -259,14 +259,14 @@ jobs:
- name: Login to DockerHub - name: Login to DockerHub
if: matrix.registry == 'homeassistant' if: matrix.registry == 'homeassistant'
uses: docker/login-action@v1.14.1 uses: docker/login-action@v2.0.0
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
if: matrix.registry == 'ghcr.io/home-assistant' if: matrix.registry == 'ghcr.io/home-assistant'
uses: docker/login-action@v1.14.1 uses: docker/login-action@v2.0.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}

View File

@ -22,7 +22,7 @@ on:
env: env:
CACHE_VERSION: 9 CACHE_VERSION: 9
PIP_CACHE_VERSION: 3 PIP_CACHE_VERSION: 3
HA_SHORT_VERSION: 2022.5 HA_SHORT_VERSION: 2022.6
DEFAULT_PYTHON: 3.9 DEFAULT_PYTHON: 3.9
PRE_COMMIT_CACHE: ~/.cache/pre-commit PRE_COMMIT_CACHE: ~/.cache/pre-commit
PIP_CACHE: /tmp/pip-cache PIP_CACHE: /tmp/pip-cache
@ -203,7 +203,7 @@ jobs:
python -m venv venv python -m venv venv
. venv/bin/activate . venv/bin/activate
python --version python --version
pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<22.1" setuptools wheel pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<22.2" setuptools wheel
pip install --cache-dir=$PIP_CACHE -r requirements.txt -r requirements_test.txt --use-deprecated=legacy-resolver pip install --cache-dir=$PIP_CACHE -r requirements.txt -r requirements_test.txt --use-deprecated=legacy-resolver
- name: Generate partial pre-commit restore key - name: Generate partial pre-commit restore key
id: generate-pre-commit-key id: generate-pre-commit-key
@ -608,7 +608,7 @@ jobs:
python -m venv venv python -m venv venv
. venv/bin/activate . venv/bin/activate
python --version python --version
pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<22.1" setuptools wheel pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<22.2" setuptools wheel
pip install --cache-dir=$PIP_CACHE -r requirements_all.txt --use-deprecated=legacy-resolver pip install --cache-dir=$PIP_CACHE -r requirements_all.txt --use-deprecated=legacy-resolver
pip install --cache-dir=$PIP_CACHE -r requirements_test.txt --use-deprecated=legacy-resolver pip install --cache-dir=$PIP_CACHE -r requirements_test.txt --use-deprecated=legacy-resolver
pip install -e . pip install -e .
@ -783,7 +783,7 @@ jobs:
echo "::add-matcher::.github/workflows/matchers/pytest-slow.json" echo "::add-matcher::.github/workflows/matchers/pytest-slow.json"
- name: Run pytest (fully) - name: Run pytest (fully)
if: needs.changes.outputs.test_full_suite == 'true' if: needs.changes.outputs.test_full_suite == 'true'
timeout-minutes: 45 timeout-minutes: 60
run: | run: |
. venv/bin/activate . venv/bin/activate
python --version python --version
@ -827,7 +827,7 @@ jobs:
-p no:sugar \ -p no:sugar \
tests/components/${{ matrix.group }} tests/components/${{ matrix.group }}
- name: Upload coverage artifact - name: Upload coverage artifact
uses: actions/upload-artifact@v3.0.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: coverage-${{ matrix.python-version }}-${{ matrix.group }} name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
path: coverage.xml path: coverage.xml

View File

@ -50,13 +50,13 @@ jobs:
) > .env_file ) > .env_file
- name: Upload env_file - name: Upload env_file
uses: actions/upload-artifact@v3.0.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: env_file name: env_file
path: ./.env_file path: ./.env_file
- name: Upload requirements_diff - name: Upload requirements_diff
uses: actions/upload-artifact@v3.0.0 uses: actions/upload-artifact@v3.1.0
with: with:
name: requirements_diff name: requirements_diff
path: ./requirements_diff.txt path: ./requirements_diff.txt
@ -96,7 +96,7 @@ jobs:
wheels-user: wheels wheels-user: wheels
env-file: true env-file: true
apk: "build-base;cmake;git;linux-headers;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;cargo" apk: "build-base;cmake;git;linux-headers;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;cargo"
pip: "Cython;numpy" pip: "Cython;numpy==1.21.6"
skip-binary: aiohttp skip-binary: aiohttp
constraints: "homeassistant/package_constraints.txt" constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt" requirements-diff: "requirements_diff.txt"
@ -134,7 +134,6 @@ jobs:
sed -i "s|# pybluez|pybluez|g" ${requirement_file} sed -i "s|# pybluez|pybluez|g" ${requirement_file}
sed -i "s|# bluepy|bluepy|g" ${requirement_file} sed -i "s|# bluepy|bluepy|g" ${requirement_file}
sed -i "s|# beacontools|beacontools|g" ${requirement_file} sed -i "s|# beacontools|beacontools|g" ${requirement_file}
sed -i "s|# RPi.GPIO|RPi.GPIO|g" ${requirement_file}
sed -i "s|# fritzconnection|fritzconnection|g" ${requirement_file} sed -i "s|# fritzconnection|fritzconnection|g" ${requirement_file}
sed -i "s|# pyuserinput|pyuserinput|g" ${requirement_file} sed -i "s|# pyuserinput|pyuserinput|g" ${requirement_file}
sed -i "s|# evdev|evdev|g" ${requirement_file} sed -i "s|# evdev|evdev|g" ${requirement_file}

View File

@ -1,6 +1,6 @@
repos: repos:
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
rev: v2.32.0 rev: v2.32.1
hooks: hooks:
- id: pyupgrade - id: pyupgrade
args: [--py39-plus] args: [--py39-plus]

View File

@ -16,13 +16,18 @@ homeassistant.auth.providers.*
homeassistant.helpers.area_registry homeassistant.helpers.area_registry
homeassistant.helpers.condition homeassistant.helpers.condition
homeassistant.helpers.discovery homeassistant.helpers.discovery
homeassistant.helpers.entity
homeassistant.helpers.entity_values homeassistant.helpers.entity_values
homeassistant.helpers.event
homeassistant.helpers.reload homeassistant.helpers.reload
homeassistant.helpers.script_variables homeassistant.helpers.script_variables
homeassistant.helpers.sun
homeassistant.helpers.translation homeassistant.helpers.translation
homeassistant.util.async_ homeassistant.util.async_
homeassistant.util.color homeassistant.util.color
homeassistant.util.decorator homeassistant.util.decorator
homeassistant.util.location
homeassistant.util.logging
homeassistant.util.process homeassistant.util.process
homeassistant.util.unit_system homeassistant.util.unit_system
@ -38,6 +43,7 @@ homeassistant.components.aftership.*
homeassistant.components.air_quality.* homeassistant.components.air_quality.*
homeassistant.components.airly.* homeassistant.components.airly.*
homeassistant.components.airvisual.* homeassistant.components.airvisual.*
homeassistant.components.airzone.*
homeassistant.components.aladdin_connect.* homeassistant.components.aladdin_connect.*
homeassistant.components.alarm_control_panel.* homeassistant.components.alarm_control_panel.*
homeassistant.components.amazon_polly.* homeassistant.components.amazon_polly.*
@ -49,6 +55,7 @@ homeassistant.components.aseko_pool_live.*
homeassistant.components.asuswrt.* homeassistant.components.asuswrt.*
homeassistant.components.automation.* homeassistant.components.automation.*
homeassistant.components.backup.* homeassistant.components.backup.*
homeassistant.components.baf.*
homeassistant.components.binary_sensor.* homeassistant.components.binary_sensor.*
homeassistant.components.bluetooth_tracker.* homeassistant.components.bluetooth_tracker.*
homeassistant.components.bmw_connected_drive.* homeassistant.components.bmw_connected_drive.*
@ -91,8 +98,10 @@ homeassistant.components.fronius.*
homeassistant.components.frontend.* homeassistant.components.frontend.*
homeassistant.components.fritz.* homeassistant.components.fritz.*
homeassistant.components.geo_location.* homeassistant.components.geo_location.*
homeassistant.components.geocaching.*
homeassistant.components.gios.* homeassistant.components.gios.*
homeassistant.components.goalzero.* homeassistant.components.goalzero.*
homeassistant.components.google.*
homeassistant.components.greeneye_monitor.* homeassistant.components.greeneye_monitor.*
homeassistant.components.group.* homeassistant.components.group.*
homeassistant.components.guardian.* homeassistant.components.guardian.*
@ -118,6 +127,7 @@ homeassistant.components.homewizard.*
homeassistant.components.http.* homeassistant.components.http.*
homeassistant.components.huawei_lte.* homeassistant.components.huawei_lte.*
homeassistant.components.hyperion.* homeassistant.components.hyperion.*
homeassistant.components.ialarm_xr.*
homeassistant.components.image_processing.* homeassistant.components.image_processing.*
homeassistant.components.input_button.* homeassistant.components.input_button.*
homeassistant.components.input_select.* homeassistant.components.input_select.*
@ -130,10 +140,12 @@ homeassistant.components.kaleidescape.*
homeassistant.components.knx.* homeassistant.components.knx.*
homeassistant.components.kraken.* homeassistant.components.kraken.*
homeassistant.components.lametric.* homeassistant.components.lametric.*
homeassistant.components.laundrify.*
homeassistant.components.lcn.* homeassistant.components.lcn.*
homeassistant.components.light.* homeassistant.components.light.*
homeassistant.components.local_ip.* homeassistant.components.local_ip.*
homeassistant.components.lock.* homeassistant.components.lock.*
homeassistant.components.logbook.*
homeassistant.components.lookin.* homeassistant.components.lookin.*
homeassistant.components.luftdaten.* homeassistant.components.luftdaten.*
homeassistant.components.mailbox.* homeassistant.components.mailbox.*
@ -156,6 +168,7 @@ homeassistant.components.no_ip.*
homeassistant.components.notify.* homeassistant.components.notify.*
homeassistant.components.notion.* homeassistant.components.notion.*
homeassistant.components.number.* homeassistant.components.number.*
homeassistant.components.nut.*
homeassistant.components.oncue.* homeassistant.components.oncue.*
homeassistant.components.onewire.* homeassistant.components.onewire.*
homeassistant.components.open_meteo.* homeassistant.components.open_meteo.*
@ -168,21 +181,11 @@ homeassistant.components.powerwall.*
homeassistant.components.proximity.* homeassistant.components.proximity.*
homeassistant.components.pvoutput.* homeassistant.components.pvoutput.*
homeassistant.components.pure_energie.* homeassistant.components.pure_energie.*
homeassistant.components.qnap_qsw.*
homeassistant.components.rainmachine.* homeassistant.components.rainmachine.*
homeassistant.components.rdw.* homeassistant.components.rdw.*
homeassistant.components.recollect_waste.* homeassistant.components.recollect_waste.*
homeassistant.components.recorder homeassistant.components.recorder.*
homeassistant.components.recorder.const
homeassistant.components.recorder.backup
homeassistant.components.recorder.executor
homeassistant.components.recorder.history
homeassistant.components.recorder.models
homeassistant.components.recorder.pool
homeassistant.components.recorder.purge
homeassistant.components.recorder.repack
homeassistant.components.recorder.statistics
homeassistant.components.recorder.util
homeassistant.components.recorder.websocket_api
homeassistant.components.remote.* homeassistant.components.remote.*
homeassistant.components.renault.* homeassistant.components.renault.*
homeassistant.components.ridwell.* homeassistant.components.ridwell.*

View File

@ -32,6 +32,8 @@ build.json @home-assistant/supervisor
/tests/components/adguard/ @frenck /tests/components/adguard/ @frenck
/homeassistant/components/advantage_air/ @Bre77 /homeassistant/components/advantage_air/ @Bre77
/tests/components/advantage_air/ @Bre77 /tests/components/advantage_air/ @Bre77
/homeassistant/components/aemet/ @Noltari
/tests/components/aemet/ @Noltari
/homeassistant/components/agent_dvr/ @ispysoftware /homeassistant/components/agent_dvr/ @ispysoftware
/tests/components/agent_dvr/ @ispysoftware /tests/components/agent_dvr/ @ispysoftware
/homeassistant/components/air_quality/ @home-assistant/core /homeassistant/components/air_quality/ @home-assistant/core
@ -48,6 +50,8 @@ build.json @home-assistant/supervisor
/tests/components/airvisual/ @bachya /tests/components/airvisual/ @bachya
/homeassistant/components/airzone/ @Noltari /homeassistant/components/airzone/ @Noltari
/tests/components/airzone/ @Noltari /tests/components/airzone/ @Noltari
/homeassistant/components/aladdin_connect/ @mkmer
/tests/components/aladdin_connect/ @mkmer
/homeassistant/components/alarm_control_panel/ @home-assistant/core /homeassistant/components/alarm_control_panel/ @home-assistant/core
/tests/components/alarm_control_panel/ @home-assistant/core /tests/components/alarm_control_panel/ @home-assistant/core
/homeassistant/components/alert/ @home-assistant/core /homeassistant/components/alert/ @home-assistant/core
@ -75,6 +79,8 @@ build.json @home-assistant/supervisor
/tests/components/api/ @home-assistant/core /tests/components/api/ @home-assistant/core
/homeassistant/components/apple_tv/ @postlund /homeassistant/components/apple_tv/ @postlund
/tests/components/apple_tv/ @postlund /tests/components/apple_tv/ @postlund
/homeassistant/components/application_credentials/ @home-assistant/core
/tests/components/application_credentials/ @home-assistant/core
/homeassistant/components/apprise/ @caronc /homeassistant/components/apprise/ @caronc
/tests/components/apprise/ @caronc /tests/components/apprise/ @caronc
/homeassistant/components/aprs/ @PhilRW /homeassistant/components/aprs/ @PhilRW
@ -114,6 +120,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/azure_service_bus/ @hfurubotten /homeassistant/components/azure_service_bus/ @hfurubotten
/homeassistant/components/backup/ @home-assistant/core /homeassistant/components/backup/ @home-assistant/core
/tests/components/backup/ @home-assistant/core /tests/components/backup/ @home-assistant/core
/homeassistant/components/baf/ @bdraco @jfroy
/tests/components/baf/ @bdraco @jfroy
/homeassistant/components/balboa/ @garbled1 /homeassistant/components/balboa/ @garbled1
/tests/components/balboa/ @garbled1 /tests/components/balboa/ @garbled1
/homeassistant/components/beewi_smartclim/ @alemuro /homeassistant/components/beewi_smartclim/ @alemuro
@ -129,8 +137,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/bluesound/ @thrawnarn /homeassistant/components/bluesound/ @thrawnarn
/homeassistant/components/bmw_connected_drive/ @gerard33 @rikroe /homeassistant/components/bmw_connected_drive/ @gerard33 @rikroe
/tests/components/bmw_connected_drive/ @gerard33 @rikroe /tests/components/bmw_connected_drive/ @gerard33 @rikroe
/homeassistant/components/bond/ @bdraco @prystupa @joshs85 /homeassistant/components/bond/ @bdraco @prystupa @joshs85 @marciogranzotto
/tests/components/bond/ @bdraco @prystupa @joshs85 /tests/components/bond/ @bdraco @prystupa @joshs85 @marciogranzotto
/homeassistant/components/bosch_shc/ @tschamm /homeassistant/components/bosch_shc/ @tschamm
/tests/components/bosch_shc/ @tschamm /tests/components/bosch_shc/ @tschamm
/homeassistant/components/braviatv/ @bieniu @Drafteed /homeassistant/components/braviatv/ @bieniu @Drafteed
@ -370,6 +378,8 @@ build.json @home-assistant/supervisor
/tests/components/geo_location/ @home-assistant/core /tests/components/geo_location/ @home-assistant/core
/homeassistant/components/geo_rss_events/ @exxamalte /homeassistant/components/geo_rss_events/ @exxamalte
/tests/components/geo_rss_events/ @exxamalte /tests/components/geo_rss_events/ @exxamalte
/homeassistant/components/geocaching/ @Sholofly @reinder83
/tests/components/geocaching/ @Sholofly @reinder83
/homeassistant/components/geonetnz_quakes/ @exxamalte /homeassistant/components/geonetnz_quakes/ @exxamalte
/tests/components/geonetnz_quakes/ @exxamalte /tests/components/geonetnz_quakes/ @exxamalte
/homeassistant/components/geonetnz_volcano/ @exxamalte /homeassistant/components/geonetnz_volcano/ @exxamalte
@ -406,6 +416,10 @@ build.json @home-assistant/supervisor
/tests/components/guardian/ @bachya /tests/components/guardian/ @bachya
/homeassistant/components/habitica/ @ASMfreaK @leikoilja /homeassistant/components/habitica/ @ASMfreaK @leikoilja
/tests/components/habitica/ @ASMfreaK @leikoilja /tests/components/habitica/ @ASMfreaK @leikoilja
/homeassistant/components/hardkernel/ @home-assistant/core
/tests/components/hardkernel/ @home-assistant/core
/homeassistant/components/hardware/ @home-assistant/core
/tests/components/hardware/ @home-assistant/core
/homeassistant/components/harmony/ @ehendrix23 @bramkragten @bdraco @mkeesey @Aohzan /homeassistant/components/harmony/ @ehendrix23 @bramkragten @bdraco @mkeesey @Aohzan
/tests/components/harmony/ @ehendrix23 @bramkragten @bdraco @mkeesey @Aohzan /tests/components/harmony/ @ehendrix23 @bramkragten @bdraco @mkeesey @Aohzan
/homeassistant/components/hassio/ @home-assistant/supervisor /homeassistant/components/hassio/ @home-assistant/supervisor
@ -451,8 +465,8 @@ build.json @home-assistant/supervisor
/tests/components/huisbaasje/ @dennisschroer /tests/components/huisbaasje/ @dennisschroer
/homeassistant/components/humidifier/ @home-assistant/core @Shulyaka /homeassistant/components/humidifier/ @home-assistant/core @Shulyaka
/tests/components/humidifier/ @home-assistant/core @Shulyaka /tests/components/humidifier/ @home-assistant/core @Shulyaka
/homeassistant/components/hunterdouglas_powerview/ @bdraco /homeassistant/components/hunterdouglas_powerview/ @bdraco @trullock
/tests/components/hunterdouglas_powerview/ @bdraco /tests/components/hunterdouglas_powerview/ @bdraco @trullock
/homeassistant/components/hvv_departures/ @vigonotion /homeassistant/components/hvv_departures/ @vigonotion
/tests/components/hvv_departures/ @vigonotion /tests/components/hvv_departures/ @vigonotion
/homeassistant/components/hydrawise/ @ptcryan /homeassistant/components/hydrawise/ @ptcryan
@ -460,6 +474,8 @@ build.json @home-assistant/supervisor
/tests/components/hyperion/ @dermotduffy /tests/components/hyperion/ @dermotduffy
/homeassistant/components/ialarm/ @RyuzakiKK /homeassistant/components/ialarm/ @RyuzakiKK
/tests/components/ialarm/ @RyuzakiKK /tests/components/ialarm/ @RyuzakiKK
/homeassistant/components/ialarm_xr/ @bigmoby
/tests/components/ialarm_xr/ @bigmoby
/homeassistant/components/iammeter/ @lewei50 /homeassistant/components/iammeter/ @lewei50
/homeassistant/components/iaqualink/ @flz /homeassistant/components/iaqualink/ @flz
/tests/components/iaqualink/ @flz /tests/components/iaqualink/ @flz
@ -546,6 +562,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/lametric/ @robbiet480 @frenck /homeassistant/components/lametric/ @robbiet480 @frenck
/homeassistant/components/launch_library/ @ludeeus @DurgNomis-drol /homeassistant/components/launch_library/ @ludeeus @DurgNomis-drol
/tests/components/launch_library/ @ludeeus @DurgNomis-drol /tests/components/launch_library/ @ludeeus @DurgNomis-drol
/homeassistant/components/laundrify/ @xLarry
/tests/components/laundrify/ @xLarry
/homeassistant/components/lcn/ @alengwenus /homeassistant/components/lcn/ @alengwenus
/tests/components/lcn/ @alengwenus /tests/components/lcn/ @alengwenus
/homeassistant/components/lg_netcast/ @Drafteed /homeassistant/components/lg_netcast/ @Drafteed
@ -809,12 +827,14 @@ build.json @home-assistant/supervisor
/homeassistant/components/radiotherm/ @vinnyfuria /homeassistant/components/radiotherm/ @vinnyfuria
/homeassistant/components/rainbird/ @konikvranik /homeassistant/components/rainbird/ @konikvranik
/homeassistant/components/raincloud/ @vanstinator /homeassistant/components/raincloud/ @vanstinator
/homeassistant/components/rainforest_eagle/ @gtdiehl @jcalbert /homeassistant/components/rainforest_eagle/ @gtdiehl @jcalbert @hastarin
/tests/components/rainforest_eagle/ @gtdiehl @jcalbert /tests/components/rainforest_eagle/ @gtdiehl @jcalbert @hastarin
/homeassistant/components/rainmachine/ @bachya /homeassistant/components/rainmachine/ @bachya
/tests/components/rainmachine/ @bachya /tests/components/rainmachine/ @bachya
/homeassistant/components/random/ @fabaff /homeassistant/components/random/ @fabaff
/tests/components/random/ @fabaff /tests/components/random/ @fabaff
/homeassistant/components/raspberry_pi/ @home-assistant/core
/tests/components/raspberry_pi/ @home-assistant/core
/homeassistant/components/rdw/ @frenck /homeassistant/components/rdw/ @frenck
/tests/components/rdw/ @frenck /tests/components/rdw/ @frenck
/homeassistant/components/recollect_waste/ @bachya /homeassistant/components/recollect_waste/ @bachya
@ -897,7 +917,6 @@ build.json @home-assistant/supervisor
/tests/components/shell_command/ @home-assistant/core /tests/components/shell_command/ @home-assistant/core
/homeassistant/components/shelly/ @balloob @bieniu @thecode @chemelli74 /homeassistant/components/shelly/ @balloob @bieniu @thecode @chemelli74
/tests/components/shelly/ @balloob @bieniu @thecode @chemelli74 /tests/components/shelly/ @balloob @bieniu @thecode @chemelli74
/homeassistant/components/shiftr/ @fabaff
/homeassistant/components/shodan/ @fabaff /homeassistant/components/shodan/ @fabaff
/homeassistant/components/sia/ @eavanvalkenburg /homeassistant/components/sia/ @eavanvalkenburg
/tests/components/sia/ @eavanvalkenburg /tests/components/sia/ @eavanvalkenburg
@ -912,8 +931,8 @@ build.json @home-assistant/supervisor
/tests/components/siren/ @home-assistant/core @raman325 /tests/components/siren/ @home-assistant/core @raman325
/homeassistant/components/sisyphus/ @jkeljo /homeassistant/components/sisyphus/ @jkeljo
/homeassistant/components/sky_hub/ @rogerselwyn /homeassistant/components/sky_hub/ @rogerselwyn
/homeassistant/components/slack/ @bachya /homeassistant/components/slack/ @bachya @tkdrob
/tests/components/slack/ @bachya /tests/components/slack/ @bachya @tkdrob
/homeassistant/components/sleepiq/ @mfugate1 @kbickar /homeassistant/components/sleepiq/ @mfugate1 @kbickar
/tests/components/sleepiq/ @mfugate1 @kbickar /tests/components/sleepiq/ @mfugate1 @kbickar
/homeassistant/components/slide/ @ualex73 /homeassistant/components/slide/ @ualex73
@ -1105,8 +1124,6 @@ build.json @home-assistant/supervisor
/homeassistant/components/velux/ @Julius2342 /homeassistant/components/velux/ @Julius2342
/homeassistant/components/venstar/ @garbled1 /homeassistant/components/venstar/ @garbled1
/tests/components/venstar/ @garbled1 /tests/components/venstar/ @garbled1
/homeassistant/components/vera/ @pavoni
/tests/components/vera/ @pavoni
/homeassistant/components/verisure/ @frenck /homeassistant/components/verisure/ @frenck
/tests/components/verisure/ @frenck /tests/components/verisure/ @frenck
/homeassistant/components/versasense/ @flamm3blemuff1n /homeassistant/components/versasense/ @flamm3blemuff1n
@ -1123,7 +1140,6 @@ build.json @home-assistant/supervisor
/tests/components/vizio/ @raman325 /tests/components/vizio/ @raman325
/homeassistant/components/vlc_telnet/ @rodripf @MartinHjelmare /homeassistant/components/vlc_telnet/ @rodripf @MartinHjelmare
/tests/components/vlc_telnet/ @rodripf @MartinHjelmare /tests/components/vlc_telnet/ @rodripf @MartinHjelmare
/homeassistant/components/volkszaehler/ @fabaff
/homeassistant/components/volumio/ @OnFreund /homeassistant/components/volumio/ @OnFreund
/tests/components/volumio/ @OnFreund /tests/components/volumio/ @OnFreund
/homeassistant/components/volvooncall/ @molobrakos @decompil3d /homeassistant/components/volvooncall/ @molobrakos @decompil3d
@ -1172,6 +1188,8 @@ build.json @home-assistant/supervisor
/tests/components/workday/ @fabaff /tests/components/workday/ @fabaff
/homeassistant/components/worldclock/ @fabaff /homeassistant/components/worldclock/ @fabaff
/tests/components/worldclock/ @fabaff /tests/components/worldclock/ @fabaff
/homeassistant/components/ws66i/ @ssaenger
/tests/components/ws66i/ @ssaenger
/homeassistant/components/xbox/ @hunterjm /homeassistant/components/xbox/ @hunterjm
/tests/components/xbox/ @hunterjm /tests/components/xbox/ @hunterjm
/homeassistant/components/xbox_live/ @MartinHjelmare /homeassistant/components/xbox_live/ @MartinHjelmare
@ -1191,6 +1209,8 @@ build.json @home-assistant/supervisor
/tests/components/yeelight/ @zewelor @shenxn @starkillerOG @alexyao2015 /tests/components/yeelight/ @zewelor @shenxn @starkillerOG @alexyao2015
/homeassistant/components/yeelightsunflower/ @lindsaymarkward /homeassistant/components/yeelightsunflower/ @lindsaymarkward
/homeassistant/components/yi/ @bachya /homeassistant/components/yi/ @bachya
/homeassistant/components/yolink/ @matrixd2
/tests/components/yolink/ @matrixd2
/homeassistant/components/youless/ @gjong /homeassistant/components/youless/ @gjong
/tests/components/youless/ @gjong /tests/components/youless/ @gjong
/homeassistant/components/zengge/ @emontnemery /homeassistant/components/zengge/ @emontnemery

View File

@ -18,6 +18,7 @@ RUN \
libavfilter-dev \ libavfilter-dev \
libpcap-dev \ libpcap-dev \
libturbojpeg0 \ libturbojpeg0 \
libxml2 \
git \ git \
cmake \ cmake \
&& apt-get clean \ && apt-get clean \

View File

@ -22,7 +22,7 @@ of a component, check the `Home Assistant help section <https://home-assistant.i
.. |Chat Status| image:: https://img.shields.io/discord/330944238910963714.svg .. |Chat Status| image:: https://img.shields.io/discord/330944238910963714.svg
:target: https://discord.gg/c5DvZ4e :target: https://discord.gg/c5DvZ4e
.. |screenshot-states| image:: https://raw.github.com/home-assistant/home-assistant/master/docs/screenshots.png .. |screenshot-states| image:: https://raw.githubusercontent.com/home-assistant/core/master/docs/screenshots.png
:target: https://home-assistant.io/demo/ :target: https://home-assistant.io/demo/
.. |screenshot-components| image:: https://raw.github.com/home-assistant/home-assistant/dev/docs/screenshot-components.png .. |screenshot-components| image:: https://raw.githubusercontent.com/home-assistant/core/dev/docs/screenshot-components.png
:target: https://home-assistant.io/integrations/ :target: https://home-assistant.io/integrations/

View File

@ -1,11 +1,11 @@
image: homeassistant/{arch}-homeassistant image: homeassistant/{arch}-homeassistant
shadow_repository: ghcr.io/home-assistant shadow_repository: ghcr.io/home-assistant
build_from: build_from:
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2022.02.0 aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2022.05.0
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2022.02.0 armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2022.05.0
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2022.02.0 armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2022.05.0
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2022.02.0 amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2022.05.0
i386: ghcr.io/home-assistant/i386-homeassistant-base:2022.02.0 i386: ghcr.io/home-assistant/i386-homeassistant-base:2022.05.0
codenotary: codenotary:
signer: notary@home-assistant.io signer: notary@home-assistant.io
base_image: notary@home-assistant.io base_image: notary@home-assistant.io

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 118 KiB

View File

@ -9,6 +9,8 @@ from logging import getLogger
from typing import Any from typing import Any
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.storage import Store
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
from . import models from . import models
@ -44,8 +46,8 @@ class AuthStore:
self._users: dict[str, models.User] | None = None self._users: dict[str, models.User] | None = None
self._groups: dict[str, models.Group] | None = None self._groups: dict[str, models.Group] | None = None
self._perm_lookup: PermissionLookup | None = None self._perm_lookup: PermissionLookup | None = None
self._store = hass.helpers.storage.Store( self._store = Store(
STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True hass, STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True
) )
self._lock = asyncio.Lock() self._lock = asyncio.Lock()
@ -303,11 +305,9 @@ class AuthStore:
async def _async_load_task(self) -> None: async def _async_load_task(self) -> None:
"""Load the users.""" """Load the users."""
[ent_reg, dev_reg, data] = await asyncio.gather( dev_reg = dr.async_get(self.hass)
self.hass.helpers.entity_registry.async_get_registry(), ent_reg = er.async_get(self.hass)
self.hass.helpers.device_registry.async_get_registry(), data = await self._store.async_load()
self._store.async_load(),
)
# Make sure that we're not overriding data if 2 loads happened at the # Make sure that we're not overriding data if 2 loads happened at the
# same time # same time
@ -316,7 +316,7 @@ class AuthStore:
self._perm_lookup = perm_lookup = PermissionLookup(ent_reg, dev_reg) self._perm_lookup = perm_lookup = PermissionLookup(ent_reg, dev_reg)
if data is None: if data is None or not isinstance(data, dict):
self._set_defaults() self._set_defaults()
return return

View File

@ -17,6 +17,7 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import FlowResult from homeassistant.data_entry_flow import FlowResult
from homeassistant.exceptions import ServiceNotFound from homeassistant.exceptions import ServiceNotFound
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.storage import Store
from . import ( from . import (
MULTI_FACTOR_AUTH_MODULE_SCHEMA, MULTI_FACTOR_AUTH_MODULE_SCHEMA,
@ -99,8 +100,8 @@ class NotifyAuthModule(MultiFactorAuthModule):
"""Initialize the user data store.""" """Initialize the user data store."""
super().__init__(hass, config) super().__init__(hass, config)
self._user_settings: _UsersDict | None = None self._user_settings: _UsersDict | None = None
self._user_store = hass.helpers.storage.Store( self._user_store = Store(
STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True hass, STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True
) )
self._include = config.get(CONF_INCLUDE, []) self._include = config.get(CONF_INCLUDE, [])
self._exclude = config.get(CONF_EXCLUDE, []) self._exclude = config.get(CONF_EXCLUDE, [])
@ -118,7 +119,9 @@ class NotifyAuthModule(MultiFactorAuthModule):
if self._user_settings is not None: if self._user_settings is not None:
return return
if (data := await self._user_store.async_load()) is None: if (data := await self._user_store.async_load()) is None or not isinstance(
data, dict
):
data = {STORAGE_USERS: {}} data = {STORAGE_USERS: {}}
self._user_settings = { self._user_settings = {

View File

@ -10,6 +10,7 @@ import voluptuous as vol
from homeassistant.auth.models import User from homeassistant.auth.models import User
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResult from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers.storage import Store
from . import ( from . import (
MULTI_FACTOR_AUTH_MODULE_SCHEMA, MULTI_FACTOR_AUTH_MODULE_SCHEMA,
@ -76,8 +77,8 @@ class TotpAuthModule(MultiFactorAuthModule):
"""Initialize the user data store.""" """Initialize the user data store."""
super().__init__(hass, config) super().__init__(hass, config)
self._users: dict[str, str] | None = None self._users: dict[str, str] | None = None
self._user_store = hass.helpers.storage.Store( self._user_store = Store(
STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True hass, STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True
) )
self._init_lock = asyncio.Lock() self._init_lock = asyncio.Lock()
@ -92,7 +93,9 @@ class TotpAuthModule(MultiFactorAuthModule):
if self._users is not None: if self._users is not None:
return return
if (data := await self._user_store.async_load()) is None: if (data := await self._user_store.async_load()) is None or not isinstance(
data, dict
):
data = {STORAGE_USERS: {}} data = {STORAGE_USERS: {}}
self._users = data.get(STORAGE_USERS, {}) self._users = data.get(STORAGE_USERS, {})

View File

@ -14,6 +14,7 @@ from homeassistant.const import CONF_ID
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.data_entry_flow import FlowResult from homeassistant.data_entry_flow import FlowResult
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.storage import Store
from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
from ..models import Credentials, UserMeta from ..models import Credentials, UserMeta
@ -60,8 +61,8 @@ class Data:
def __init__(self, hass: HomeAssistant) -> None: def __init__(self, hass: HomeAssistant) -> None:
"""Initialize the user data store.""" """Initialize the user data store."""
self.hass = hass self.hass = hass
self._store = hass.helpers.storage.Store( self._store = Store(
STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True hass, STORAGE_VERSION, STORAGE_KEY, private=True, atomic_writes=True
) )
self._data: dict[str, Any] | None = None self._data: dict[str, Any] | None = None
# Legacy mode will allow usernames to start/end with whitespace # Legacy mode will allow usernames to start/end with whitespace
@ -79,7 +80,9 @@ class Data:
async def async_load(self) -> None: async def async_load(self) -> None:
"""Load stored data.""" """Load stored data."""
if (data := await self._store.async_load()) is None: if (data := await self._store.async_load()) is None or not isinstance(
data, dict
):
data = {"users": []} data = {"users": []}
seen: set[str] = set() seen: set[str] = set()
@ -203,7 +206,8 @@ class Data:
async def async_save(self) -> None: async def async_save(self) -> None:
"""Save data.""" """Save data."""
await self._store.async_save(self._data) if self._data is not None:
await self._store.async_save(self._data)
@AUTH_PROVIDERS.register("homeassistant") @AUTH_PROVIDERS.register("homeassistant")

View File

@ -1,8 +1,8 @@
{ {
"config": { "config": {
"abort": { "abort": {
"reauth_successful": "Herauthenticatie was succesvol", "reauth_successful": "Herauthenticatie geslaagd",
"single_instance_allowed": "Slechts een enkele configuratie van Abode is toegestaan." "single_instance_allowed": "Al geconfigureerd. Slechts \u00e9\u00e9n configuratie mogelijk."
}, },
"error": { "error": {
"cannot_connect": "Kan geen verbinding maken", "cannot_connect": "Kan geen verbinding maken",
@ -26,7 +26,7 @@
"user": { "user": {
"data": { "data": {
"password": "Wachtwoord", "password": "Wachtwoord",
"username": "E-mailadres" "username": "E-mail"
}, },
"title": "Vul uw Abode-inloggegevens in" "title": "Vul uw Abode-inloggegevens in"
} }

View File

@ -2,12 +2,6 @@
"config": { "config": {
"error": { "error": {
"requests_exceeded": "\u062a\u0645 \u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u0639\u062f\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0625\u0644\u0649 Accuweather API. \u0639\u0644\u064a\u0643 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0623\u0648 \u062a\u063a\u064a\u064a\u0631 \u0645\u0641\u062a\u0627\u062d API." "requests_exceeded": "\u062a\u0645 \u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u0639\u062f\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0625\u0644\u0649 Accuweather API. \u0639\u0644\u064a\u0643 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0623\u0648 \u062a\u063a\u064a\u064a\u0631 \u0645\u0641\u062a\u0627\u062d API."
},
"step": {
"user": {
"description": "\u0625\u0630\u0627 \u0643\u0646\u062a \u0628\u062d\u0627\u062c\u0629 \u0625\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a \u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u060c \u0641\u0642\u0645 \u0628\u0625\u0644\u0642\u0627\u0621 \u0646\u0638\u0631\u0629 \u0647\u0646\u0627: https://www.home-assistant.io/integrations/accuweather/ \n\n \u0644\u0627 \u064a\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u0628\u0639\u0636 \u0623\u062c\u0647\u0632\u0629 \u0627\u0644\u0627\u0633\u062a\u0634\u0639\u0627\u0631 \u0628\u0634\u0643\u0644 \u0627\u0641\u062a\u0631\u0627\u0636\u064a. \u064a\u0645\u0643\u0646\u0643 \u062a\u0645\u0643\u064a\u0646\u0647\u0645 \u0641\u064a \u0633\u062c\u0644 \u0627\u0644\u0643\u064a\u0627\u0646 \u0628\u0639\u062f \u062a\u0643\u0648\u064a\u0646 \u0627\u0644\u062a\u0643\u0627\u0645\u0644.\n \u0644\u0627 \u064a\u062a\u0645 \u062a\u0645\u0643\u064a\u0646 \u062a\u0648\u0642\u0639\u0627\u062a \u0627\u0644\u0637\u0642\u0633 \u0627\u0641\u062a\u0631\u0627\u0636\u064a\u064b\u0627. \u064a\u0645\u0643\u0646\u0643 \u062a\u0645\u0643\u064a\u0646\u0647 \u0641\u064a \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u0643\u0627\u0645\u0644.",
"title": "AccuWeather"
}
} }
}, },
"options": { "options": {
@ -16,8 +10,7 @@
"data": { "data": {
"forecast": "\u0627\u0644\u0646\u0634\u0631\u0629 \u0627\u0644\u062c\u0648\u064a\u0629" "forecast": "\u0627\u0644\u0646\u0634\u0631\u0629 \u0627\u0644\u062c\u0648\u064a\u0629"
}, },
"description": "\u0646\u0638\u0631\u064b\u0627 \u0644\u0642\u064a\u0648\u062f \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0645\u062c\u0627\u0646\u064a \u0645\u0646 \u0645\u0641\u062a\u0627\u062d AccuWeather API \u060c \u0639\u0646\u062f \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u0646\u0628\u0624 \u0628\u0627\u0644\u0637\u0642\u0633 \u060c \u0633\u064a\u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u062a\u062d\u062f\u064a\u062b\u0627\u062a \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0643\u0644 80 \u062f\u0642\u064a\u0642\u0629 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0643\u0644 40 \u062f\u0642\u064a\u0642\u0629.", "description": "\u0646\u0638\u0631\u064b\u0627 \u0644\u0642\u064a\u0648\u062f \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0645\u062c\u0627\u0646\u064a \u0645\u0646 \u0645\u0641\u062a\u0627\u062d AccuWeather API \u060c \u0639\u0646\u062f \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u0646\u0628\u0624 \u0628\u0627\u0644\u0637\u0642\u0633 \u060c \u0633\u064a\u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u062a\u062d\u062f\u064a\u062b\u0627\u062a \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0643\u0644 80 \u062f\u0642\u064a\u0642\u0629 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0643\u0644 40 \u062f\u0642\u064a\u0642\u0629."
"title": "\u062e\u064a\u0627\u0631\u0627\u062a AccuWeather"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"latitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0448\u0438\u0440\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", "longitude": "\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0430 \u0434\u044a\u043b\u0436\u0438\u043d\u0430",
"name": "\u0418\u043c\u0435" "name": "\u0418\u043c\u0435"
}, }
"title": "AccuWeather"
} }
} }
} }

View File

@ -18,9 +18,7 @@
"latitude": "Latitud", "latitude": "Latitud",
"longitude": "Longitud", "longitude": "Longitud",
"name": "Nom" "name": "Nom"
}, }
"description": "Si necessites ajuda amb la configuraci\u00f3, consulta els seg\u00fcent enlla\u00e7: https://www.home-assistant.io/integrations/accuweather/ \n\n Alguns sensors no estan activats de manera predeterminada. Els pots activar des del registre d'entitats, despr\u00e9s de la configurraci\u00f3 de la integraci\u00f3.\n La previsi\u00f3 meteorol\u00f2gica no est\u00e0 activada de manera predeterminada. Pots activar-la en les opcions de la integraci\u00f3.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Previsi\u00f3 meteorol\u00f2gica" "forecast": "Previsi\u00f3 meteorol\u00f2gica"
}, },
"description": "Per culpa de les limitacions de la versi\u00f3 gratu\u00efta l'API d'AccuWeather, quan habilitis la previsi\u00f3 meteorol\u00f2gica, les actualitzacions de dades es faran cada 80 minuts en comptes de cada 40.", "description": "Per culpa de les limitacions de la versi\u00f3 gratu\u00efta l'API d'AccuWeather, quan habilitis la previsi\u00f3 meteorol\u00f2gica, les actualitzacions de dades es faran cada 80 minuts en comptes de cada 40."
"title": "Opcions d'AccuWeather"
} }
} }
}, },

View File

@ -15,9 +15,7 @@
"latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka", "latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka",
"longitude": "Zem\u011bpisn\u00e1 d\u00e9lka", "longitude": "Zem\u011bpisn\u00e1 d\u00e9lka",
"name": "Jm\u00e9no" "name": "Jm\u00e9no"
}, }
"description": "Pokud pot\u0159ebujete pomoc s nastaven\u00ed, pod\u00edvejte se na: https://www.home-assistant.io/integrations/accuweather/\n\nN\u011bkter\u00e9 senzory nejsou ve v\u00fdchoz\u00edm nastaven\u00ed povoleny. M\u016f\u017eete je povolit po nastaven\u00ed integrace v registru entit.\nP\u0159edpov\u011b\u010f po\u010das\u00ed nen\u00ed ve v\u00fdchoz\u00edm nastaven\u00ed povolena. M\u016f\u017eete ji povolit v mo\u017enostech integrace.",
"title": "AccuWeather"
} }
} }
}, },
@ -27,8 +25,7 @@
"data": { "data": {
"forecast": "P\u0159edpov\u011b\u010f po\u010das\u00ed" "forecast": "P\u0159edpov\u011b\u010f po\u010das\u00ed"
}, },
"description": "Kdy\u017e povol\u00edte p\u0159edpov\u011b\u010f po\u010das\u00ed, budou aktualizace dat prov\u00e1d\u011bny ka\u017ed\u00fdch 80 minut nam\u00edsto 40 minut z d\u016fvodu omezen\u00ed bezplatn\u00e9 verze AccuWeather.", "description": "Kdy\u017e povol\u00edte p\u0159edpov\u011b\u010f po\u010das\u00ed, budou aktualizace dat prov\u00e1d\u011bny ka\u017ed\u00fdch 80 minut nam\u00edsto 40 minut z d\u016fvodu omezen\u00ed bezplatn\u00e9 verze AccuWeather."
"title": "Mo\u017enosti AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Breitengrad", "latitude": "Breitengrad",
"longitude": "L\u00e4ngengrad", "longitude": "L\u00e4ngengrad",
"name": "Name" "name": "Name"
}, }
"description": "Wenn du Hilfe bei der Konfiguration ben\u00f6tigst, schaue hier nach: https://www.home-assistant.io/integrations/accuweather/\n\nEinige Sensoren sind standardm\u00e4\u00dfig nicht aktiviert. Du kannst sie in der Entit\u00e4tsregister nach der Integrationskonfiguration aktivieren.\nDie Wettervorhersage ist nicht standardm\u00e4\u00dfig aktiviert. Du kannst sie in den Integrationsoptionen aktivieren.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Wettervorhersage" "forecast": "Wettervorhersage"
}, },
"description": "Aufgrund der Einschr\u00e4nkungen der kostenlosen Version des AccuWeather-API-Schl\u00fcssels werden bei aktivierter Wettervorhersage Datenaktualisierungen alle 80 Minuten statt alle 40 Minuten durchgef\u00fchrt.", "description": "Aufgrund der Einschr\u00e4nkungen der kostenlosen Version des AccuWeather-API-Schl\u00fcssels werden bei aktivierter Wettervorhersage Datenaktualisierungen alle 80 Minuten statt alle 40 Minuten durchgef\u00fchrt."
"title": "AccuWeather Optionen"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2", "latitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03c0\u03bb\u03ac\u03c4\u03bf\u03c2",
"longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2", "longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2",
"name": "\u038c\u03bd\u03bf\u03bc\u03b1" "name": "\u038c\u03bd\u03bf\u03bc\u03b1"
}, }
"description": "\u0391\u03bd \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c3\u03c4\u03b5 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03bc\u03b5 \u03c4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7, \u03c1\u03af\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03bc\u03b1\u03c4\u03b9\u03ac \u03b5\u03b4\u03ce: https://www.home-assistant.io/integrations/accuweather/\n\n\u039f\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03b9 \u03b1\u03b9\u03c3\u03b8\u03b7\u03c4\u03ae\u03c1\u03b5\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf\u03b9 \u03b1\u03c0\u03cc \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03bf\u03c5\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c3\u03c4\u03bf \u03bc\u03b7\u03c4\u03c1\u03ce\u03bf \u03bf\u03bd\u03c4\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7 \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2.\n\u0397 \u03c0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b7 \u03b1\u03c0\u03cc \u03c0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03b7\u03bd \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b9\u03c2 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "\u03a0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd" "forecast": "\u03a0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd"
}, },
"description": "\u039b\u03cc\u03b3\u03c9 \u03c4\u03c9\u03bd \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ce\u03bd \u03c4\u03b7\u03c2 \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd API \u03c4\u03bf\u03c5 AccuWeather, \u03cc\u03c4\u03b1\u03bd \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd, \u03bf\u03b9 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b8\u03b1 \u03c0\u03c1\u03b1\u03b3\u03bc\u03b1\u03c4\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03ba\u03ac\u03b8\u03b5 80 \u03bb\u03b5\u03c0\u03c4\u03ac \u03b1\u03bd\u03c4\u03af \u03b3\u03b9\u03b1 \u03ba\u03ac\u03b8\u03b5 40 \u03bb\u03b5\u03c0\u03c4\u03ac.", "description": "\u039b\u03cc\u03b3\u03c9 \u03c4\u03c9\u03bd \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ce\u03bd \u03c4\u03b7\u03c2 \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd API \u03c4\u03bf\u03c5 AccuWeather, \u03cc\u03c4\u03b1\u03bd \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd, \u03bf\u03b9 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b8\u03b1 \u03c0\u03c1\u03b1\u03b3\u03bc\u03b1\u03c4\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03ba\u03ac\u03b8\u03b5 80 \u03bb\u03b5\u03c0\u03c4\u03ac \u03b1\u03bd\u03c4\u03af \u03b3\u03b9\u03b1 \u03ba\u03ac\u03b8\u03b5 40 \u03bb\u03b5\u03c0\u03c4\u03ac."
"title": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Latitude", "latitude": "Latitude",
"longitude": "Longitude", "longitude": "Longitude",
"name": "Name" "name": "Name"
}, }
"description": "If you need help with the configuration have a look here: https://www.home-assistant.io/integrations/accuweather/\n\nSome sensors are not enabled by default. You can enable them in the entity registry after the integration configuration.\nWeather forecast is not enabled by default. You can enable it in the integration options.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Weather forecast" "forecast": "Weather forecast"
}, },
"description": "Due to the limitations of the free version of the AccuWeather API key, when you enable weather forecast, data updates will be performed every 80 minutes instead of every 40 minutes.", "description": "Due to the limitations of the free version of the AccuWeather API key, when you enable weather forecast, data updates will be performed every 80 minutes instead of every 40 minutes."
"title": "AccuWeather Options"
} }
} }
}, },

View File

@ -7,12 +7,6 @@
"cannot_connect": "No se pudo conectar", "cannot_connect": "No se pudo conectar",
"invalid_api_key": "Clave de API no v\u00e1lida", "invalid_api_key": "Clave de API no v\u00e1lida",
"requests_exceeded": "Se super\u00f3 el n\u00famero permitido de solicitudes a la API de Accuweather. Tiene que esperar o cambiar la clave de API." "requests_exceeded": "Se super\u00f3 el n\u00famero permitido de solicitudes a la API de Accuweather. Tiene que esperar o cambiar la clave de API."
},
"step": {
"user": {
"description": "Si necesita ayuda con la configuraci\u00f3n, eche un vistazo aqu\u00ed: https://www.home-assistant.io/integrations/accuweather/ \n\nAlgunos sensores no est\u00e1n habilitados de forma predeterminada. Puede habilitarlos en el registro de entidades despu\u00e9s de la configuraci\u00f3n de integraci\u00f3n. La previsi\u00f3n meteorol\u00f3gica no est\u00e1 habilitada de forma predeterminada. Puede habilitarlo en las opciones de integraci\u00f3n.",
"title": "AccuWeather"
}
} }
}, },
"options": { "options": {
@ -21,8 +15,7 @@
"data": { "data": {
"forecast": "Pron\u00f3stico del tiempo" "forecast": "Pron\u00f3stico del tiempo"
}, },
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilita el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 64 minutos en lugar de cada 32 minutos.", "description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilita el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 64 minutos en lugar de cada 32 minutos."
"title": "Opciones de AccuWeather"
} }
} }
}, },

View File

@ -15,9 +15,7 @@
"latitude": "Latitud", "latitude": "Latitud",
"longitude": "Longitud", "longitude": "Longitud",
"name": "Nombre" "name": "Nombre"
}, }
"description": "Si necesitas ayuda con la configuraci\u00f3n, echa un vistazo aqu\u00ed: https://www.home-assistant.io/integrations/accuweather/ \n\nAlgunos sensores no est\u00e1n habilitados por defecto. Los puedes habilitar en el registro de entidades despu\u00e9s de configurar la integraci\u00f3n.\nEl pron\u00f3stico del tiempo no est\u00e1 habilitado por defecto. Puedes habilitarlo en las opciones de la integraci\u00f3n.",
"title": "AccuWeather"
} }
} }
}, },
@ -27,8 +25,7 @@
"data": { "data": {
"forecast": "Pron\u00f3stico del tiempo" "forecast": "Pron\u00f3stico del tiempo"
}, },
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilitas el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 64 minutos en lugar de cada 32 minutos.", "description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilitas el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 64 minutos en lugar de cada 32 minutos."
"title": "Opciones de AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Laiuskraad", "latitude": "Laiuskraad",
"longitude": "Pikkuskraad", "longitude": "Pikkuskraad",
"name": "Sidumise nimi" "name": "Sidumise nimi"
}, }
"description": "Kui vajate seadistamisel abi vaadake siit: https://www.home-assistant.io/integrations/accuweather/ \n\n M\u00f5ni andur pole vaikimisi lubatud. P\u00e4rast sidumise seadistamist saate need \u00fcksused lubada. \n Ilmapennustus pole vaikimisi lubatud. Saate selle lubada sidumise s\u00e4tetes.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Ilmateade" "forecast": "Ilmateade"
}, },
"description": "AccuWeather API tasuta versioonis toimub ilmaennustuse lubamisel andmete v\u00e4rskendamine iga 80 minuti j\u00e4rel (muidu 40 minutit).", "description": "AccuWeather API tasuta versioonis toimub ilmaennustuse lubamisel andmete v\u00e4rskendamine iga 80 minuti j\u00e4rel (muidu 40 minutit)."
"title": "AccuWeatheri valikud"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Latitude", "latitude": "Latitude",
"longitude": "Longitude", "longitude": "Longitude",
"name": "Nom" "name": "Nom"
}, }
"description": "Si vous avez besoin d'aide pour la configuration, consultez\u00a0: https://www.home-assistant.io/integrations/accuweather/\n\nCertains capteurs ne sont pas activ\u00e9s par d\u00e9faut. Vous pouvez les activer dans le registre des entit\u00e9s une fois la configuration de l'int\u00e9gration termin\u00e9e.\nLes pr\u00e9visions m\u00e9t\u00e9orologiques ne sont pas activ\u00e9es par d\u00e9faut. Vous pouvez les activer dans les options de l'int\u00e9gration.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Pr\u00e9visions m\u00e9t\u00e9orologiques" "forecast": "Pr\u00e9visions m\u00e9t\u00e9orologiques"
}, },
"description": "En raison des limitations de la version gratuite de la cl\u00e9 API AccuWeather, lorsque vous activez les pr\u00e9visions m\u00e9t\u00e9orologiques, les mises \u00e0 jour des donn\u00e9es seront effectu\u00e9es toutes les 64 minutes au lieu de toutes les 32 minutes.", "description": "En raison des limitations de la version gratuite de la cl\u00e9 API AccuWeather, lorsque vous activez les pr\u00e9visions m\u00e9t\u00e9orologiques, les mises \u00e0 jour des donn\u00e9es seront effectu\u00e9es toutes les 64 minutes au lieu de toutes les 32 minutes."
"title": "Options AccuWeather"
} }
} }
}, },

View File

@ -15,9 +15,7 @@
"latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1", "latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1",
"longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da", "longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da",
"name": "\u05e9\u05dd" "name": "\u05e9\u05dd"
}, }
"description": "\u05d0\u05dd \u05d4\u05d9\u05e0\u05da \u05d6\u05e7\u05d5\u05e7 \u05dc\u05e2\u05d6\u05e8\u05d4 \u05e2\u05dd \u05d4\u05ea\u05e6\u05d5\u05e8\u05d4, \u05d9\u05e9 \u05dc\u05e2\u05d9\u05d9\u05df \u05db\u05d0\u05df: https://www.home-assistant.io/integrations/accuweather/\n\n\u05d7\u05d9\u05d9\u05e9\u05e0\u05d9\u05dd \u05de\u05e1\u05d5\u05d9\u05de\u05d9\u05dd \u05d0\u05d9\u05e0\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05db\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc. \u05d1\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea\u05da \u05dc\u05d4\u05e4\u05d5\u05da \u05d0\u05d5\u05ea\u05dd \u05dc\u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1\u05e8\u05d9\u05e9\u05d5\u05dd \u05d4\u05d9\u05e9\u05d5\u05d9\u05d5\u05ea \u05dc\u05d0\u05d7\u05e8 \u05e7\u05d1\u05d9\u05e2\u05ea \u05d4\u05ea\u05e6\u05d5\u05e8\u05d4 \u05e9\u05dc \u05d4\u05e9\u05d9\u05dc\u05d5\u05d1.\n\u05ea\u05d7\u05d6\u05d9\u05ea \u05de\u05d6\u05d2 \u05d4\u05d0\u05d5\u05d5\u05d9\u05e8 \u05d0\u05d9\u05e0\u05d4 \u05d6\u05de\u05d9\u05e0\u05d4 \u05db\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc. \u05d1\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea\u05da \u05dc\u05d4\u05e4\u05d5\u05da \u05d0\u05d5\u05ea\u05d5 \u05dc\u05d6\u05de\u05d9\u05df \u05d1\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d4\u05e9\u05d9\u05dc\u05d5\u05d1.",
"title": "AccuWeather"
} }
} }
}, },
@ -27,8 +25,7 @@
"data": { "data": {
"forecast": "\u05ea\u05d7\u05d6\u05d9\u05ea \u05de\u05d6\u05d2 \u05d4\u05d0\u05d5\u05d5\u05d9\u05e8" "forecast": "\u05ea\u05d7\u05d6\u05d9\u05ea \u05de\u05d6\u05d2 \u05d4\u05d0\u05d5\u05d5\u05d9\u05e8"
}, },
"description": "\u05d1\u05e9\u05dc \u05de\u05d2\u05d1\u05dc\u05d5\u05ea \u05d4\u05d2\u05d9\u05e8\u05e1\u05d4 \u05d4\u05d7\u05d9\u05e0\u05de\u05d9\u05ea \u05e9\u05dc \u05de\u05e4\u05ea\u05d7 \u05d4-API \u05e9\u05dc AccuWeather, \u05db\u05d0\u05e9\u05e8 \u05ea\u05e4\u05e2\u05d9\u05dc \u05ea\u05d7\u05d6\u05d9\u05ea \u05de\u05d6\u05d2 \u05d0\u05d5\u05d5\u05d9\u05e8, \u05e2\u05d3\u05db\u05d5\u05e0\u05d9 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d9\u05d1\u05d5\u05e6\u05e2\u05d5 \u05db\u05dc 80 \u05d3\u05e7\u05d5\u05ea \u05d1\u05de\u05e7\u05d5\u05dd \u05db\u05dc 40 \u05d3\u05e7\u05d5\u05ea.", "description": "\u05d1\u05e9\u05dc \u05de\u05d2\u05d1\u05dc\u05d5\u05ea \u05d4\u05d2\u05d9\u05e8\u05e1\u05d4 \u05d4\u05d7\u05d9\u05e0\u05de\u05d9\u05ea \u05e9\u05dc \u05de\u05e4\u05ea\u05d7 \u05d4-API \u05e9\u05dc AccuWeather, \u05db\u05d0\u05e9\u05e8 \u05ea\u05e4\u05e2\u05d9\u05dc \u05ea\u05d7\u05d6\u05d9\u05ea \u05de\u05d6\u05d2 \u05d0\u05d5\u05d5\u05d9\u05e8, \u05e2\u05d3\u05db\u05d5\u05e0\u05d9 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d9\u05d1\u05d5\u05e6\u05e2\u05d5 \u05db\u05dc 80 \u05d3\u05e7\u05d5\u05ea \u05d1\u05de\u05e7\u05d5\u05dd \u05db\u05dc 40 \u05d3\u05e7\u05d5\u05ea."
"title": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Sz\u00e9less\u00e9g", "latitude": "Sz\u00e9less\u00e9g",
"longitude": "Hossz\u00fas\u00e1g", "longitude": "Hossz\u00fas\u00e1g",
"name": "Elnevez\u00e9s" "name": "Elnevez\u00e9s"
}, }
"description": "Ha seg\u00edts\u00e9gre van sz\u00fcks\u00e9ge a konfigur\u00e1l\u00e1shoz, n\u00e9zze meg itt: https://www.home-assistant.io/integrations/accuweather/ \n\nEgyes \u00e9rz\u00e9kel\u0151k alap\u00e9rtelmez\u00e9s szerint nincsenek enged\u00e9lyezve. Az integr\u00e1ci\u00f3s konfigur\u00e1ci\u00f3 ut\u00e1n enged\u00e9lyezheti \u0151ket az entit\u00e1s-nyilv\u00e1ntart\u00e1sban.\nAz id\u0151j\u00e1r\u00e1s-el\u0151rejelz\u00e9s alap\u00e9rtelmez\u00e9s szerint nincs enged\u00e9lyezve. Ezt az integr\u00e1ci\u00f3s be\u00e1ll\u00edt\u00e1sokban enged\u00e9lyezheti.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Id\u0151j\u00e1r\u00e1s el\u0151rejelz\u00e9s" "forecast": "Id\u0151j\u00e1r\u00e1s el\u0151rejelz\u00e9s"
}, },
"description": "Az AccuWeather API kulcs ingyenes verzi\u00f3j\u00e1nak korl\u00e1tai miatt, amikor enged\u00e9lyezi az id\u0151j\u00e1r\u00e1s -el\u0151rejelz\u00e9st, az adatfriss\u00edt\u00e9seket 40 percenk\u00e9nt 80 percenk\u00e9nt hajtj\u00e1k v\u00e9gre.", "description": "Az AccuWeather API kulcs ingyenes verzi\u00f3j\u00e1nak korl\u00e1tai miatt, amikor enged\u00e9lyezi az id\u0151j\u00e1r\u00e1s -el\u0151rejelz\u00e9st, az adatfriss\u00edt\u00e9seket 40 percenk\u00e9nt 80 percenk\u00e9nt hajtj\u00e1k v\u00e9gre."
"title": "AccuWeather be\u00e1ll\u00edt\u00e1sok"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Lintang", "latitude": "Lintang",
"longitude": "Bujur", "longitude": "Bujur",
"name": "Nama" "name": "Nama"
}, }
"description": "Jika Anda memerlukan bantuan tentang konfigurasi, baca di sini: https://www.home-assistant.io/integrations/accuweather/\n\nBeberapa sensor tidak diaktifkan secara default. Anda dapat mengaktifkannya di registri entitas setelah konfigurasi integrasi.\nPrakiraan cuaca tidak diaktifkan secara default. Anda dapat mengaktifkannya di opsi integrasi.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Prakiraan cuaca" "forecast": "Prakiraan cuaca"
}, },
"description": "Karena keterbatasan versi gratis kunci API AccuWeather, ketika Anda mengaktifkan prakiraan cuaca, pembaruan data akan dilakukan setiap 80 menit, bukan setiap 40 menit.", "description": "Karena keterbatasan versi gratis kunci API AccuWeather, ketika Anda mengaktifkan prakiraan cuaca, pembaruan data akan dilakukan setiap 80 menit, bukan setiap 40 menit."
"title": "Opsi AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Latitudine", "latitude": "Latitudine",
"longitude": "Logitudine", "longitude": "Logitudine",
"name": "Nome" "name": "Nome"
}, }
"description": "Se hai bisogno di aiuto con la configurazione dai un'occhiata qui: https://www.home-assistant.io/integrations/accuweather/ \n\nAlcuni sensori non sono abilitati per impostazione predefinita. \u00c8 possibile abilitarli nel registro entit\u00e0 dopo la configurazione di integrazione. \nLe previsioni meteo non sono abilitate per impostazione predefinita. Puoi abilitarle nelle opzioni di integrazione.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Previsioni meteo" "forecast": "Previsioni meteo"
}, },
"description": "A causa delle limitazioni della versione gratuita della chiave API AccuWeather, quando si abilitano le previsioni del tempo, gli aggiornamenti dei dati verranno eseguiti ogni 80 minuti invece che ogni 40.", "description": "A causa delle limitazioni della versione gratuita della chiave API AccuWeather, quando si abilitano le previsioni del tempo, gli aggiornamenti dei dati verranno eseguiti ogni 80 minuti invece che ogni 40."
"title": "Opzioni AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "\u7def\u5ea6", "latitude": "\u7def\u5ea6",
"longitude": "\u7d4c\u5ea6", "longitude": "\u7d4c\u5ea6",
"name": "\u540d\u524d" "name": "\u540d\u524d"
}, }
"description": "\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u30d8\u30eb\u30d7\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001https://www.home-assistant.io/integrations/accuweather/ \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304f\u3060\u3055\u3044\n\n\u4e00\u90e8\u306e\u30bb\u30f3\u30b5\u30fc\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u8a2d\u5b9a\u5f8c\u306b\u3001\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30ec\u30b8\u30b9\u30c8\u30ea\u3067\u6709\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n\u5929\u6c17\u4e88\u5831\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6709\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "\u5929\u6c17\u4e88\u5831" "forecast": "\u5929\u6c17\u4e88\u5831"
}, },
"description": "\u5236\u9650\u306b\u3088\u308a\u7121\u6599\u30d0\u30fc\u30b8\u30e7\u30f3\u306eAccuWeather API\u30ad\u30fc\u3067\u306f\u3001\u5929\u6c17\u4e88\u5831\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u306f40\u5206\u3067\u306f\u306a\u304f80\u5206\u3054\u3068\u3067\u3059\u3002", "description": "\u5236\u9650\u306b\u3088\u308a\u7121\u6599\u30d0\u30fc\u30b8\u30e7\u30f3\u306eAccuWeather API\u30ad\u30fc\u3067\u306f\u3001\u5929\u6c17\u4e88\u5831\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u306f40\u5206\u3067\u306f\u306a\u304f80\u5206\u3054\u3068\u3067\u3059\u3002"
"title": "AccuWeather\u306e\u30aa\u30d7\u30b7\u30e7\u30f3"
} }
} }
}, },

View File

@ -15,9 +15,7 @@
"latitude": "\uc704\ub3c4", "latitude": "\uc704\ub3c4",
"longitude": "\uacbd\ub3c4", "longitude": "\uacbd\ub3c4",
"name": "\uc774\ub984" "name": "\uc774\ub984"
}, }
"description": "\uad6c\uc131\uc5d0 \ub300\ud55c \ub3c4\uc6c0\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \ub2e4\uc74c\uc744 \ucc38\uc870\ud574\uc8fc\uc138\uc694: https://www.home-assistant.io/integrations/accuweather/\n\n\uc77c\ubd80 \uc13c\uc11c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ud65c\uc131\ud654\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud1b5\ud569 \uad6c\uc131\uc694\uc18c \uad6c\uc131 \ud6c4 \uad6c\uc131\uc694\uc18c \ub808\uc9c0\uc2a4\ud2b8\ub9ac\uc5d0\uc11c \ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc77c\uae30\uc608\ubcf4\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ud65c\uc131\ud654\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud1b5\ud569 \uad6c\uc131\uc694\uc18c \uc635\uc158\uc5d0\uc11c \ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",
"title": "AccuWeather"
} }
} }
}, },
@ -27,8 +25,7 @@
"data": { "data": {
"forecast": "\ub0a0\uc528 \uc608\ubcf4" "forecast": "\ub0a0\uc528 \uc608\ubcf4"
}, },
"description": "\ubb34\ub8cc \ubc84\uc804\uc758 AccuWeather API \ud0a4\ub85c \uc77c\uae30\uc608\ubcf4\ub97c \ud65c\uc131\ud654\ud55c \uacbd\uc6b0 \uc81c\ud55c\uc0ac\ud56d\uc73c\ub85c \uc778\ud574 \uc5c5\ub370\uc774\ud2b8\ub294 40 \ubd84\uc774 \uc544\ub2cc 80 \ubd84\ub9c8\ub2e4 \uc218\ud589\ub429\ub2c8\ub2e4.", "description": "\ubb34\ub8cc \ubc84\uc804\uc758 AccuWeather API \ud0a4\ub85c \uc77c\uae30\uc608\ubcf4\ub97c \ud65c\uc131\ud654\ud55c \uacbd\uc6b0 \uc81c\ud55c\uc0ac\ud56d\uc73c\ub85c \uc778\ud574 \uc5c5\ub370\uc774\ud2b8\ub294 40 \ubd84\uc774 \uc544\ub2cc 80 \ubd84\ub9c8\ub2e4 \uc218\ud589\ub429\ub2c8\ub2e4."
"title": "AccuWeather \uc635\uc158"
} }
} }
}, },

View File

@ -15,9 +15,7 @@
"latitude": "Breedegrad", "latitude": "Breedegrad",
"longitude": "L\u00e4ngegrad", "longitude": "L\u00e4ngegrad",
"name": "Numm" "name": "Numm"
}, }
"description": "Falls du H\u00ebllef mat der Konfiguratioun brauch kuck h\u00e9i:\nhttps://www.home-assistant.io/integrations/accuweather/\n\nVerschidde Sensoren si standardm\u00e9isseg net aktiv. Du kanns d\u00e9i an der Entit\u00e9ie Registry no der Konfiguratioun vun der Integratioun aschalten.\n\nWieder Pr\u00e9visounen si standardm\u00e9isseg net aktiv. Du kanns d\u00e9i an den Optioune vun der Integratioun aschalten.",
"title": "AccuWeather"
} }
} }
}, },
@ -27,8 +25,7 @@
"data": { "data": {
"forecast": "Wieder Pr\u00e9visioun" "forecast": "Wieder Pr\u00e9visioun"
}, },
"description": "Duerch d'Limite vun der Gratis Versioun vun der AccuWeather API, wann d'Wieder Pr\u00e9visoune aktiv\u00e9iert sinn, ginn d'Aktualis\u00e9ierungen all 64 Minutten gemaach, am plaatz vun all 32 Minutten.", "description": "Duerch d'Limite vun der Gratis Versioun vun der AccuWeather API, wann d'Wieder Pr\u00e9visoune aktiv\u00e9iert sinn, ginn d'Aktualis\u00e9ierungen all 64 Minutten gemaach, am plaatz vun all 32 Minutten."
"title": "AccuWeather Optiounen"
} }
} }
}, },

View File

@ -1,14 +1,14 @@
{ {
"config": { "config": {
"abort": { "abort": {
"single_instance_allowed": "Al geconfigureerd. Slechts een enkele configuratie mogelijk." "single_instance_allowed": "Al geconfigureerd. Slechts \u00e9\u00e9n configuratie mogelijk."
}, },
"create_entry": { "create_entry": {
"default": "Sommige sensoren zijn standaard niet ingeschakeld. U kunt ze inschakelen in het entiteitenregister na de integratieconfiguratie.\nWeersvoorspelling is niet standaard ingeschakeld. U kunt deze inschakelen in de integratieopties." "default": "Sommige sensoren zijn standaard niet ingeschakeld. U kunt ze inschakelen in het entiteitenregister na de integratieconfiguratie.\nWeersvoorspelling is niet standaard ingeschakeld. U kunt deze inschakelen in de integratieopties."
}, },
"error": { "error": {
"cannot_connect": "Kan geen verbinding maken", "cannot_connect": "Kan geen verbinding maken",
"invalid_api_key": "API-sleutel", "invalid_api_key": "Ongeldige API-sleutel",
"requests_exceeded": "Het toegestane aantal verzoeken aan de Accuweather API is overschreden. U moet wachten of de API-sleutel wijzigen." "requests_exceeded": "Het toegestane aantal verzoeken aan de Accuweather API is overschreden. U moet wachten of de API-sleutel wijzigen."
}, },
"step": { "step": {
@ -18,9 +18,7 @@
"latitude": "Breedtegraad", "latitude": "Breedtegraad",
"longitude": "Lengtegraad", "longitude": "Lengtegraad",
"name": "Naam" "name": "Naam"
}, }
"description": "Als je hulp nodig hebt bij de configuratie, kijk dan hier: https://www.home-assistant.io/integrations/accuweather/ \n\n Sommige sensoren zijn niet standaard ingeschakeld. U kunt ze inschakelen in het entiteitenregister na de integratieconfiguratie.\n Weersvoorspelling is niet standaard ingeschakeld. U kunt het inschakelen in de integratieopties.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Weervoorspelling" "forecast": "Weervoorspelling"
}, },
"description": "Vanwege de beperkingen van de gratis versie van de AccuWeather API-sleutel, worden gegevensupdates elke 64 minuten in plaats van elke 32 minuten uitgevoerd wanneer u weersvoorspelling inschakelt.", "description": "Vanwege de beperkingen van de gratis versie van de AccuWeather API-sleutel, worden gegevensupdates elke 64 minuten in plaats van elke 32 minuten uitgevoerd wanneer u weersvoorspelling inschakelt."
"title": "AccuWeather-opties"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Breddegrad", "latitude": "Breddegrad",
"longitude": "Lengdegrad", "longitude": "Lengdegrad",
"name": "Navn" "name": "Navn"
}, }
"description": "Hvis du trenger hjelp med konfigurasjonen, kan du se her: https://www.home-assistant.io/integrations/accuweather/ \n\nNoen sensorer er ikke aktivert som standard. Du kan aktivere dem i entitetsregisteret etter integrasjonskonfigurasjonen. \nV\u00e6rmelding er ikke aktivert som standard. Du kan aktivere det i integrasjonsalternativene.",
"title": ""
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "V\u00e6rmelding" "forecast": "V\u00e6rmelding"
}, },
"description": "P\u00e5 grunn av begrensningene i den gratis versjonen av AccuWeather API-n\u00f8kkelen, vil dataoppdateringer utf\u00f8res hvert 80. minutt i stedet for hvert 40. minutt n\u00e5r du aktiverer v\u00e6rmelding.", "description": "P\u00e5 grunn av begrensningene i den gratis versjonen av AccuWeather API-n\u00f8kkelen, vil dataoppdateringer utf\u00f8res hvert 80. minutt i stedet for hvert 40. minutt n\u00e5r du aktiverer v\u00e6rmelding."
"title": "AccuWeather-alternativer"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Szeroko\u015b\u0107 geograficzna", "latitude": "Szeroko\u015b\u0107 geograficzna",
"longitude": "D\u0142ugo\u015b\u0107 geograficzna", "longitude": "D\u0142ugo\u015b\u0107 geograficzna",
"name": "Nazwa" "name": "Nazwa"
}, }
"description": "Je\u015bli potrzebujesz pomocy z konfiguracj\u0105, przejd\u017a na stron\u0119: https://www.home-assistant.io/integrations/accuweather/ \n\nCz\u0119\u015b\u0107 sensor\u00f3w nie jest w\u0142\u0105czona domy\u015blnie. Mo\u017cesz je w\u0142\u0105czy\u0107 w rejestrze encji po konfiguracji integracji.\nPrognoza pogody nie jest domy\u015blnie w\u0142\u0105czona. Mo\u017cesz j\u0105 w\u0142\u0105czy\u0107 w opcjach integracji.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Prognoza pogody" "forecast": "Prognoza pogody"
}, },
"description": "Ze wzgl\u0119du na ograniczenia darmowej wersji klucza API AccuWeather po w\u0142\u0105czeniu prognozy pogody aktualizacje danych b\u0119d\u0105 wykonywane co 80 minut zamiast co 40 minut.", "description": "Ze wzgl\u0119du na ograniczenia darmowej wersji klucza API AccuWeather po w\u0142\u0105czeniu prognozy pogody aktualizacje danych b\u0119d\u0105 wykonywane co 80 minut zamiast co 40 minut."
"title": "Opcje AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Latitude", "latitude": "Latitude",
"longitude": "Longitude", "longitude": "Longitude",
"name": "Nome" "name": "Nome"
}, }
"description": "Se precisar de ajuda com a configura\u00e7\u00e3o, d\u00ea uma olhada aqui: https://www.home-assistant.io/integrations/accuweather/ \n\nAlguns sensores n\u00e3o s\u00e3o ativados por padr\u00e3o. Voc\u00ea pode habilit\u00e1-los no registro da entidade ap\u00f3s a configura\u00e7\u00e3o da integra\u00e7\u00e3o.\nA previs\u00e3o do tempo n\u00e3o est\u00e1 habilitada por padr\u00e3o. Voc\u00ea pode habilit\u00e1-lo nas op\u00e7\u00f5es de integra\u00e7\u00e3o.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Previs\u00e3o do Tempo" "forecast": "Previs\u00e3o do Tempo"
}, },
"description": "Devido \u00e0s limita\u00e7\u00f5es da vers\u00e3o gratuita da chave da API AccuWeather, quando voc\u00ea habilita a previs\u00e3o do tempo, as atualiza\u00e7\u00f5es de dados ser\u00e3o realizadas a cada 64 minutos em vez de a cada 32 minutos.", "description": "Devido \u00e0s limita\u00e7\u00f5es da vers\u00e3o gratuita da chave da API AccuWeather, quando voc\u00ea habilita a previs\u00e3o do tempo, as atualiza\u00e7\u00f5es de dados ser\u00e3o realizadas a cada 64 minutos em vez de a cada 32 minutos."
"title": "Op\u00e7\u00f5es do AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430",
"longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430",
"name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435"
}, }
"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, \u0435\u0441\u043b\u0438 \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439:\nhttps://www.home-assistant.io/integrations/accuweather/ \n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0441\u043a\u0440\u044b\u0442\u044b \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b" "forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b"
}, },
"description": "\u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043f\u043e\u0433\u043e\u0434\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0435 80 \u043c\u0438\u043d\u0443\u0442, \u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 40 \u043c\u0438\u043d\u0443\u0442.", "description": "\u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043f\u043e\u0433\u043e\u0434\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0435 80 \u043c\u0438\u043d\u0443\u0442, \u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 40 \u043c\u0438\u043d\u0443\u0442."
"title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "Enlem", "latitude": "Enlem",
"longitude": "Boylam", "longitude": "Boylam",
"name": "Ad" "name": "Ad"
}, }
"description": "Yap\u0131land\u0131rmayla ilgili yard\u0131ma ihtiyac\u0131n\u0131z varsa buraya bak\u0131n: https://www.home-assistant.io/integrations/accuweather/ \n\n Baz\u0131 sens\u00f6rler varsay\u0131lan olarak etkin de\u011fildir. Bunlar\u0131, entegrasyon yap\u0131land\u0131rmas\u0131ndan sonra varl\u0131k kay\u0131t defterinde etkinle\u015ftirebilirsiniz.\n Hava tahmini varsay\u0131lan olarak etkin de\u011fildir. Entegrasyon se\u00e7eneklerinde etkinle\u015ftirebilirsiniz.",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "Hava Durumu tahmini" "forecast": "Hava Durumu tahmini"
}, },
"description": "AccuWeather API anahtar\u0131n\u0131n \u00fccretsiz s\u00fcr\u00fcm\u00fcn\u00fcn s\u0131n\u0131rlamalar\u0131 nedeniyle, hava tahminini etkinle\u015ftirdi\u011finizde, veri g\u00fcncellemeleri her 40 dakikada bir yerine 80 dakikada bir ger\u00e7ekle\u015ftirilir.", "description": "AccuWeather API anahtar\u0131n\u0131n \u00fccretsiz s\u00fcr\u00fcm\u00fcn\u00fcn s\u0131n\u0131rlamalar\u0131 nedeniyle, hava tahminini etkinle\u015ftirdi\u011finizde, veri g\u00fcncellemeleri her 40 dakikada bir yerine 80 dakikada bir ger\u00e7ekle\u015ftirilir."
"title": "AccuWeather Se\u00e7enekleri"
} }
} }
}, },

View File

@ -15,9 +15,7 @@
"latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430",
"longitude": "\u0414\u043e\u0432\u0433\u043e\u0442\u0430", "longitude": "\u0414\u043e\u0432\u0433\u043e\u0442\u0430",
"name": "\u041d\u0430\u0437\u0432\u0430" "name": "\u041d\u0430\u0437\u0432\u0430"
}, }
"description": "\u041e\u0437\u043d\u0430\u0439\u043e\u043c\u0442\u0435\u0441\u044f \u0437 \u0456\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0456\u044f\u043c\u0438, \u044f\u043a\u0449\u043e \u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u0437 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u043c:\n https://www.home-assistant.io/integrations/accuweather/ \n\n\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0434\u0435\u044f\u043a\u0456 \u0441\u0435\u043d\u0441\u043e\u0440\u0438 \u043f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0456 \u0456 \u0432\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u0438. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0445 \u0441\u0435\u043d\u0441\u043e\u0440\u0456\u0432 \u0432 \u0440\u0435\u0454\u0441\u0442\u0440\u0456 \u043e\u0431'\u0454\u043a\u0442\u0456\u0432 \u0456 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u043f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u0438 \u0432 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u0445 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0457.",
"title": "AccuWeather"
} }
} }
}, },
@ -27,8 +25,7 @@
"data": { "data": {
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u0438" "forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u0438"
}, },
"description": "\u0423 \u0437\u0432'\u044f\u0437\u043a\u0443 \u0437 \u043e\u0431\u043c\u0435\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u043e\u0457 \u0432\u0435\u0440\u0441\u0456\u0457 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0456 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0443 \u043f\u043e\u0433\u043e\u0434\u0438 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u0431\u0443\u0434\u0435 \u0432\u0456\u0434\u0431\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u0436\u043d\u0456 64 \u0445\u0432\u0438\u043b\u0438\u043d\u0438, \u0430 \u043d\u0435 \u043a\u043e\u0436\u043d\u0456 32 \u0445\u0432\u0438\u043b\u0438\u043d\u0438.", "description": "\u0423 \u0437\u0432'\u044f\u0437\u043a\u0443 \u0437 \u043e\u0431\u043c\u0435\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u043e\u0457 \u0432\u0435\u0440\u0441\u0456\u0457 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0456 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0443 \u043f\u043e\u0433\u043e\u0434\u0438 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u0431\u0443\u0434\u0435 \u0432\u0456\u0434\u0431\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u0436\u043d\u0456 64 \u0445\u0432\u0438\u043b\u0438\u043d\u0438, \u0430 \u043d\u0435 \u043a\u043e\u0436\u043d\u0456 32 \u0445\u0432\u0438\u043b\u0438\u043d\u0438."
"title": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f AccuWeather"
} }
} }
}, },

View File

@ -18,9 +18,7 @@
"latitude": "\u7def\u5ea6", "latitude": "\u7def\u5ea6",
"longitude": "\u7d93\u5ea6", "longitude": "\u7d93\u5ea6",
"name": "\u540d\u7a31" "name": "\u540d\u7a31"
}, }
"description": "\u5047\u5982\u4f60\u9700\u8981\u5354\u52a9\u9032\u884c\u8a2d\u5b9a\uff0c\u8acb\u53c3\u95b1\uff1ahttps://www.home-assistant.io/integrations/accuweather/\n\n\u67d0\u4e9b\u611f\u6e2c\u5668\u9810\u8a2d\u70ba\u672a\u555f\u7528\uff0c\u53ef\u4ee5\u65bc\u6574\u5408\u8a2d\u5b9a\u4e2d\u555f\u7528\u9019\u4e9b\u5be6\u9ad4\u3002\u5929\u6c23\u9810\u5831\u9810\u8a2d\u672a\u958b\u555f\u3002\u53ef\u4ee5\u65bc\u6574\u5408\u9078\u9805\u4e2d\u958b\u555f\u3002",
"title": "AccuWeather"
} }
} }
}, },
@ -30,8 +28,7 @@
"data": { "data": {
"forecast": "\u5929\u6c23\u9810\u5831" "forecast": "\u5929\u6c23\u9810\u5831"
}, },
"description": "\u7531\u65bc AccuWeather API \u91d1\u9470\u514d\u8cbb\u7248\u672c\u9650\u5236\uff0c\u7576\u958b\u555f\u5929\u6c23\u9810\u5831\u6642\u3001\u6578\u64da\u6703\u6bcf 80 \u5206\u9418\u66f4\u65b0\u4e00\u6b21\uff0c\u800c\u975e 40 \u5206\u9418\u3002", "description": "\u7531\u65bc AccuWeather API \u91d1\u9470\u514d\u8cbb\u7248\u672c\u9650\u5236\uff0c\u7576\u958b\u555f\u5929\u6c23\u9810\u5831\u6642\u3001\u6578\u64da\u6703\u6bcf 80 \u5206\u9418\u66f4\u65b0\u4e00\u6b21\uff0c\u800c\u975e 40 \u5206\u9418\u3002"
"title": "AccuWeather \u9078\u9805"
} }
} }
}, },

View File

@ -2,10 +2,8 @@
import aiopulse import aiopulse
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers import entity from homeassistant.helpers import device_registry as dr, entity, entity_registry as er
from homeassistant.helpers.device_registry import async_get_registry as get_dev_reg
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_registry import async_get_registry as get_ent_reg
from .const import ACMEDA_ENTITY_REMOVE, DOMAIN, LOGGER from .const import ACMEDA_ENTITY_REMOVE, DOMAIN, LOGGER
@ -21,11 +19,11 @@ class AcmedaBase(entity.Entity):
"""Unregister from entity and device registry and call entity remove function.""" """Unregister from entity and device registry and call entity remove function."""
LOGGER.error("Removing %s %s", self.__class__.__name__, self.unique_id) LOGGER.error("Removing %s %s", self.__class__.__name__, self.unique_id)
ent_registry = await get_ent_reg(self.hass) ent_registry = er.async_get(self.hass)
if self.entity_id in ent_registry.entities: if self.entity_id in ent_registry.entities:
ent_registry.async_remove(self.entity_id) ent_registry.async_remove(self.entity_id)
dev_registry = await get_dev_reg(self.hass) dev_registry = dr.async_get(self.hass)
device = dev_registry.async_get_device(identifiers={(DOMAIN, self.unique_id)}) device = dev_registry.async_get_device(identifiers={(DOMAIN, self.unique_id)})
if device is not None: if device is not None:
dev_registry.async_update_device( dev_registry.async_update_device(

View File

@ -3,7 +3,7 @@ from __future__ import annotations
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.device_registry import async_get_registry as get_dev_reg from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, LOGGER from .const import DOMAIN, LOGGER
@ -36,7 +36,7 @@ def async_add_acmeda_entities(
async def update_devices(hass: HomeAssistant, config_entry: ConfigEntry, api): async def update_devices(hass: HomeAssistant, config_entry: ConfigEntry, api):
"""Tell hass that device info has been updated.""" """Tell hass that device info has been updated."""
dev_registry = await get_dev_reg(hass) dev_registry = dr.async_get(hass)
for api_item in api.values(): for api_item in api.values():
# Update Device name # Update Device name

View File

@ -3,7 +3,7 @@
"name": "Adax", "name": "Adax",
"config_flow": true, "config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/adax", "documentation": "https://www.home-assistant.io/integrations/adax",
"requirements": ["adax==0.2.0", "Adax-local==0.1.3"], "requirements": ["adax==0.2.0", "Adax-local==0.1.4"],
"codeowners": ["@danielhiversen"], "codeowners": ["@danielhiversen"],
"iot_class": "local_polling", "iot_class": "local_polling",
"loggers": ["adax", "adax_local"] "loggers": ["adax", "adax_local"]

View File

@ -5,8 +5,7 @@
"invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435" "invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435"
}, },
"error": { "error": {
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435", "cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
"invalid_auth": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -19,12 +18,6 @@
"wifi_pswd": "Wi-Fi \u043f\u0430\u0440\u043e\u043b\u0430", "wifi_pswd": "Wi-Fi \u043f\u0430\u0440\u043e\u043b\u0430",
"wifi_ssid": "Wi-Fi SSID" "wifi_ssid": "Wi-Fi SSID"
} }
},
"user": {
"data": {
"host": "\u0425\u043e\u0441\u0442",
"password": "\u041f\u0430\u0440\u043e\u043b\u0430"
}
} }
} }
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Autenticaci\u00f3 inv\u00e0lida" "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida"
}, },
"error": { "error": {
"cannot_connect": "Ha fallat la connexi\u00f3", "cannot_connect": "Ha fallat la connexi\u00f3"
"invalid_auth": "Autenticaci\u00f3 inv\u00e0lida"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID del compte", "connection_type": "Selecciona el tipus de connexi\u00f3"
"connection_type": "Selecciona el tipus de connexi\u00f3",
"host": "Amfitri\u00f3",
"password": "Contrasenya"
}, },
"description": "Selecciona el tipus de connexi\u00f3. La local necessita escalfadors amb Bluetooth" "description": "Selecciona el tipus de connexi\u00f3. La local necessita escalfadors amb Bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed" "invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed"
}, },
"error": { "error": {
"cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit", "cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit"
"invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID \u00fa\u010dtu", "connection_type": "Vyberte typ p\u0159ipojen\u00ed"
"connection_type": "Vyberte typ p\u0159ipojen\u00ed",
"host": "Hostitel",
"password": "Heslo"
}, },
"description": "Vyberte typ p\u0159ipojen\u00ed. Lok\u00e1ln\u00ed vy\u017eaduje oh\u0159\u00edva\u010de s bluetooth" "description": "Vyberte typ p\u0159ipojen\u00ed. Lok\u00e1ln\u00ed vy\u017eaduje oh\u0159\u00edva\u010de s bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Ung\u00fcltige Authentifizierung" "invalid_auth": "Ung\u00fcltige Authentifizierung"
}, },
"error": { "error": {
"cannot_connect": "Verbindung fehlgeschlagen", "cannot_connect": "Verbindung fehlgeschlagen"
"invalid_auth": "Ung\u00fcltige Authentifizierung"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Konto-ID", "connection_type": "Verbindungstyp ausw\u00e4hlen"
"connection_type": "Verbindungstyp ausw\u00e4hlen",
"host": "Host",
"password": "Passwort"
}, },
"description": "Verbindungstyp ausw\u00e4hlen. Lokal erfordert Heizungen mit Bluetooth" "description": "Verbindungstyp ausw\u00e4hlen. Lokal erfordert Heizungen mit Bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2" "invalid_auth": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2"
}, },
"error": { "error": {
"cannot_connect": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2", "cannot_connect": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2"
"invalid_auth": "\u039c\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "\u0391\u03bd\u03b1\u03b3\u03bd\u03c9\u03c1\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd", "connection_type": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03cd\u03c0\u03bf\u03c5 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2"
"connection_type": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03cd\u03c0\u03bf\u03c5 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2",
"host": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03c4\u03ae\u03c2",
"password": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2"
}, },
"description": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03cd\u03c0\u03bf \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2. \u03a4\u03bf\u03c0\u03b9\u03ba\u03ae \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03b8\u03b5\u03c1\u03bc\u03ac\u03c3\u03c4\u03c1\u03b5\u03c2 \u03bc\u03b5 bluetooth" "description": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03cd\u03c0\u03bf \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2. \u03a4\u03bf\u03c0\u03b9\u03ba\u03ae \u03b1\u03c0\u03b1\u03b9\u03c4\u03b5\u03af \u03b8\u03b5\u03c1\u03bc\u03ac\u03c3\u03c4\u03c1\u03b5\u03c2 \u03bc\u03b5 bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Invalid authentication" "invalid_auth": "Invalid authentication"
}, },
"error": { "error": {
"cannot_connect": "Failed to connect", "cannot_connect": "Failed to connect"
"invalid_auth": "Invalid authentication"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Account ID", "connection_type": "Select connection type"
"connection_type": "Select connection type",
"host": "Host",
"password": "Password"
}, },
"description": "Select connection type. Local requires heaters with bluetooth" "description": "Select connection type. Local requires heaters with bluetooth"
} }

View File

@ -20,7 +20,6 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID de cuenta",
"connection_type": "Seleccione el tipo de conexi\u00f3n" "connection_type": "Seleccione el tipo de conexi\u00f3n"
}, },
"description": "Seleccione el tipo de conexi\u00f3n. Local requiere calentadores con bluetooth" "description": "Seleccione el tipo de conexi\u00f3n. Local requiere calentadores con bluetooth"

View File

@ -7,8 +7,7 @@
"invalid_auth": "Autenticaci\u00f3n no v\u00e1lida" "invalid_auth": "Autenticaci\u00f3n no v\u00e1lida"
}, },
"error": { "error": {
"cannot_connect": "No se pudo conectar", "cannot_connect": "No se pudo conectar"
"invalid_auth": "Autenticaci\u00f3n no v\u00e1lida"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID de la cuenta", "connection_type": "Seleccione el tipo de conexi\u00f3n"
"connection_type": "Seleccione el tipo de conexi\u00f3n",
"host": "Host",
"password": "Contrase\u00f1a"
}, },
"description": "Seleccione el tipo de conexi\u00f3n. Local requiere calentadores con bluetooth" "description": "Seleccione el tipo de conexi\u00f3n. Local requiere calentadores con bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Tuvastamine nurjus" "invalid_auth": "Tuvastamine nurjus"
}, },
"error": { "error": {
"cannot_connect": "\u00dchendamine nurjus", "cannot_connect": "\u00dchendamine nurjus"
"invalid_auth": "Tuvastamise viga"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Konto ID", "connection_type": "Vali \u00fchenduse t\u00fc\u00fcp"
"connection_type": "Vali \u00fchenduse t\u00fc\u00fcp",
"host": "Host",
"password": "Salas\u00f5na"
}, },
"description": "Vali \u00fchenduse t\u00fc\u00fcp. Kohalik n\u00f5uab bluetoothiga k\u00fctteseadmeid" "description": "Vali \u00fchenduse t\u00fc\u00fcp. Kohalik n\u00f5uab bluetoothiga k\u00fctteseadmeid"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Authentification non valide" "invalid_auth": "Authentification non valide"
}, },
"error": { "error": {
"cannot_connect": "\u00c9chec de connexion", "cannot_connect": "\u00c9chec de connexion"
"invalid_auth": "Authentification non valide"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "identifiant de compte", "connection_type": "S\u00e9lectionner le type de connexion"
"connection_type": "S\u00e9lectionner le type de connexion",
"host": "H\u00f4te",
"password": "Mot de passe"
}, },
"description": "S\u00e9lectionnez le type de connexion. Local n\u00e9cessite des radiateurs avec Bluetooth" "description": "S\u00e9lectionnez le type de connexion. Local n\u00e9cessite des radiateurs avec Bluetooth"
} }

View File

@ -5,21 +5,13 @@
"invalid_auth": "\u05d0\u05d9\u05de\u05d5\u05ea \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9" "invalid_auth": "\u05d0\u05d9\u05de\u05d5\u05ea \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9"
}, },
"error": { "error": {
"cannot_connect": "\u05d4\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05e0\u05db\u05e9\u05dc\u05d4", "cannot_connect": "\u05d4\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05e0\u05db\u05e9\u05dc\u05d4"
"invalid_auth": "\u05d0\u05d9\u05de\u05d5\u05ea \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9"
}, },
"step": { "step": {
"cloud": { "cloud": {
"data": { "data": {
"password": "\u05e1\u05d9\u05e1\u05de\u05d4" "password": "\u05e1\u05d9\u05e1\u05de\u05d4"
} }
},
"user": {
"data": {
"account_id": "\u05de\u05d6\u05d4\u05d4 \u05d7\u05e9\u05d1\u05d5\u05df",
"host": "\u05de\u05d0\u05e8\u05d7",
"password": "\u05e1\u05d9\u05e1\u05de\u05d4"
}
} }
} }
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s" "invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s"
}, },
"error": { "error": {
"cannot_connect": "Nem siker\u00fclt csatlakozni", "cannot_connect": "Nem siker\u00fclt csatlakozni"
"invalid_auth": "\u00c9rv\u00e9nytelen hiteles\u00edt\u00e9s"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Fi\u00f3k ID", "connection_type": "V\u00e1lassza ki a kapcsolat t\u00edpus\u00e1t"
"connection_type": "V\u00e1lassza ki a kapcsolat t\u00edpus\u00e1t",
"host": "C\u00edm",
"password": "Jelsz\u00f3"
}, },
"description": "V\u00e1lassza ki a kapcsolat t\u00edpus\u00e1t. A Helyi kapcsolathoz bluetooth-os f\u0171t\u0151berendez\u00e9sekre van sz\u00fcks\u00e9g" "description": "V\u00e1lassza ki a kapcsolat t\u00edpus\u00e1t. A Helyi kapcsolathoz bluetooth-os f\u0171t\u0151berendez\u00e9sekre van sz\u00fcks\u00e9g"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Autentikasi tidak valid" "invalid_auth": "Autentikasi tidak valid"
}, },
"error": { "error": {
"cannot_connect": "Gagal terhubung", "cannot_connect": "Gagal terhubung"
"invalid_auth": "Autentikasi tidak valid"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID Akun", "connection_type": "Pilih jenis koneksi"
"connection_type": "Pilih jenis koneksi",
"host": "Host",
"password": "Kata Sandi"
}, },
"description": "Pilih jenis koneksi. Lokal membutuhkan pemanas dengan bluetooth" "description": "Pilih jenis koneksi. Lokal membutuhkan pemanas dengan bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Autenticazione non valida" "invalid_auth": "Autenticazione non valida"
}, },
"error": { "error": {
"cannot_connect": "Impossibile connettersi", "cannot_connect": "Impossibile connettersi"
"invalid_auth": "Autenticazione non valida"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID account", "connection_type": "Seleziona il tipo di connessione"
"connection_type": "Seleziona il tipo di connessione",
"host": "Host",
"password": "Password"
}, },
"description": "Seleziona il tipo di connessione. Locale richiede riscaldatori con bluetooth" "description": "Seleziona il tipo di connessione. Locale richiede riscaldatori con bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "\u7121\u52b9\u306a\u8a8d\u8a3c" "invalid_auth": "\u7121\u52b9\u306a\u8a8d\u8a3c"
}, },
"error": { "error": {
"cannot_connect": "\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f", "cannot_connect": "\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f"
"invalid_auth": "\u7121\u52b9\u306a\u8a8d\u8a3c"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "\u30a2\u30ab\u30a6\u30f3\u30c8ID", "connection_type": "\u63a5\u7d9a\u30bf\u30a4\u30d7\u306e\u9078\u629e"
"connection_type": "\u63a5\u7d9a\u30bf\u30a4\u30d7\u306e\u9078\u629e",
"host": "\u30db\u30b9\u30c8",
"password": "\u30d1\u30b9\u30ef\u30fc\u30c9"
}, },
"description": "\u63a5\u7d9a\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u306b\u306fBluetooth\u4ed8\u304d\u306e\u30d2\u30fc\u30bf\u30fc\u304c\u5fc5\u8981\u3067\u3059" "description": "\u63a5\u7d9a\u30bf\u30a4\u30d7\u3092\u9078\u629e\u3057\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u306b\u306fBluetooth\u4ed8\u304d\u306e\u30d2\u30fc\u30bf\u30fc\u304c\u5fc5\u8981\u3067\u3059"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Ongeldige authenticatie" "invalid_auth": "Ongeldige authenticatie"
}, },
"error": { "error": {
"cannot_connect": "Kan geen verbinding maken", "cannot_connect": "Kan geen verbinding maken"
"invalid_auth": "Ongeldige authenticatie"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Account ID", "connection_type": "Selecteer verbindingstype"
"connection_type": "Selecteer verbindingstype",
"host": "Host",
"password": "Wachtwoord"
}, },
"description": "Selecteer verbindingstype. Lokaal vereist verwarming met Bluetooth." "description": "Selecteer verbindingstype. Lokaal vereist verwarming met Bluetooth."
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Ugyldig godkjenning" "invalid_auth": "Ugyldig godkjenning"
}, },
"error": { "error": {
"cannot_connect": "Tilkobling mislyktes", "cannot_connect": "Tilkobling mislyktes"
"invalid_auth": "Ugyldig godkjenning"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Konto-ID", "connection_type": "Velg tilkoblingstype"
"connection_type": "Velg tilkoblingstype",
"host": "Vert",
"password": "Passord"
}, },
"description": "Velg tilkoblingstype. Lokalt krever varmeovner med bluetooth" "description": "Velg tilkoblingstype. Lokalt krever varmeovner med bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Niepoprawne uwierzytelnienie" "invalid_auth": "Niepoprawne uwierzytelnienie"
}, },
"error": { "error": {
"cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia", "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia"
"invalid_auth": "Niepoprawne uwierzytelnienie"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Identyfikator konta", "connection_type": "Wybierz typ po\u0142\u0105czenia"
"connection_type": "Wybierz typ po\u0142\u0105czenia",
"host": "Nazwa hosta lub adres IP",
"password": "Has\u0142o"
}, },
"description": "Wybierz typ po\u0142\u0105czenia. \"Lokalny\" wymaga grzejnik\u00f3w z bluetooth." "description": "Wybierz typ po\u0142\u0105czenia. \"Lokalny\" wymaga grzejnik\u00f3w z bluetooth."
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida" "invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida"
}, },
"error": { "error": {
"cannot_connect": "Falha ao conectar", "cannot_connect": "Falha ao conectar"
"invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID da conta", "connection_type": "Selecione o tipo de conex\u00e3o"
"connection_type": "Selecione o tipo de conex\u00e3o",
"host": "Nome do host",
"password": "Senha"
}, },
"description": "Selecione o tipo de conex\u00e3o. Local requer aquecedores com bluetooth" "description": "Selecione o tipo de conex\u00e3o. Local requer aquecedores com bluetooth"
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438." "invalid_auth": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438."
}, },
"error": { "error": {
"cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\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."
"invalid_auth": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438."
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "ID \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438", "connection_type": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f"
"connection_type": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f",
"host": "\u0425\u043e\u0441\u0442",
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
}, },
"description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0438 \u0441 Bluetooth." "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u0438 \u0441 Bluetooth."
} }

View File

@ -2,9 +2,6 @@
"config": { "config": {
"abort": { "abort": {
"invalid_auth": "Neplatn\u00e9 overenie" "invalid_auth": "Neplatn\u00e9 overenie"
},
"error": {
"invalid_auth": "Neplatn\u00e9 overenie"
} }
} }
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama" "invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama"
}, },
"error": { "error": {
"cannot_connect": "Ba\u011flanma hatas\u0131", "cannot_connect": "Ba\u011flanma hatas\u0131"
"invalid_auth": "Ge\u00e7ersiz kimlik do\u011frulama"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "Hesap Kimli\u011fi", "connection_type": "Ba\u011flant\u0131 t\u00fcr\u00fcn\u00fc se\u00e7in"
"connection_type": "Ba\u011flant\u0131 t\u00fcr\u00fcn\u00fc se\u00e7in",
"host": "Sunucu",
"password": "Parola"
}, },
"description": "Ba\u011flant\u0131 t\u00fcr\u00fcn\u00fc se\u00e7in. Yerel Bluetooth'lu \u0131s\u0131t\u0131c\u0131lar gerektirir" "description": "Ba\u011flant\u0131 t\u00fcr\u00fcn\u00fc se\u00e7in. Yerel Bluetooth'lu \u0131s\u0131t\u0131c\u0131lar gerektirir"
} }

View File

@ -21,8 +21,7 @@
}, },
"user": { "user": {
"data": { "data": {
"connection_type": "\u9009\u62e9\u8fde\u63a5\u7c7b\u578b", "connection_type": "\u9009\u62e9\u8fde\u63a5\u7c7b\u578b"
"password": "\u5bc6\u7801"
} }
} }
} }

View File

@ -7,8 +7,7 @@
"invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548" "invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548"
}, },
"error": { "error": {
"cannot_connect": "\u9023\u7dda\u5931\u6557", "cannot_connect": "\u9023\u7dda\u5931\u6557"
"invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548"
}, },
"step": { "step": {
"cloud": { "cloud": {
@ -26,10 +25,7 @@
}, },
"user": { "user": {
"data": { "data": {
"account_id": "\u5e33\u865f ID", "connection_type": "\u9078\u64c7\u9023\u7dda\u985e\u5225"
"connection_type": "\u9078\u64c7\u9023\u7dda\u985e\u5225",
"host": "\u4e3b\u6a5f\u7aef",
"password": "\u5bc6\u78bc"
}, },
"description": "\u9078\u64c7\u9023\u7dda\u985e\u5225\u3002\u672c\u5730\u7aef\u5c07\u9700\u8981\u5177\u5099\u85cd\u82bd\u52a0\u71b1\u5668" "description": "\u9078\u64c7\u9023\u7dda\u985e\u5225\u3002\u672c\u5730\u7aef\u5c07\u9700\u8981\u5177\u5099\u85cd\u82bd\u52a0\u71b1\u5668"
} }

View File

@ -10,16 +10,16 @@
"step": { "step": {
"hassio_confirm": { "hassio_confirm": {
"description": "\u00bfDesea configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento Supervisor: {addon} ?", "description": "\u00bfDesea configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento Supervisor: {addon} ?",
"title": "AdGuard Home a trav\u00e9s del complemento Supervisor" "title": "AdGuard Home v\u00eda complemento de Home Assistant"
}, },
"user": { "user": {
"data": { "data": {
"host": "Host", "host": "Host",
"password": "Contrase\u00f1a", "password": "Contrase\u00f1a",
"port": "Puerto", "port": "Puerto",
"ssl": "AdGuard Home utiliza un certificado SSL", "ssl": "Utiliza un certificado SSL",
"username": "Usuario", "username": "Usuario",
"verify_ssl": "AdGuard Home utiliza un certificado apropiado" "verify_ssl": "Verificar certificado SSL"
}, },
"description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control." "description": "Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control."
} }

View File

@ -1,7 +1,7 @@
{ {
"config": { "config": {
"abort": { "abort": {
"already_configured": "Service is al geconfigureerd", "already_configured": "Dienst is al geconfigureerd",
"existing_instance_updated": "Bestaande configuratie bijgewerkt." "existing_instance_updated": "Bestaande configuratie bijgewerkt."
}, },
"error": { "error": {
@ -17,9 +17,9 @@
"host": "Host", "host": "Host",
"password": "Wachtwoord", "password": "Wachtwoord",
"port": "Poort", "port": "Poort",
"ssl": "AdGuard Home maakt gebruik van een SSL certificaat", "ssl": "Maakt gebruik van een SSL-certificaat",
"username": "Gebruikersnaam", "username": "Gebruikersnaam",
"verify_ssl": "AdGuard Home maakt gebruik van een goed certificaat" "verify_ssl": "SSL-certificaat verifi\u00ebren"
}, },
"description": "Stel uw AdGuard Home-instantie in om toezicht en controle mogelijk te maken." "description": "Stel uw AdGuard Home-instantie in om toezicht en controle mogelijk te maken."
} }

View File

@ -4,7 +4,7 @@
"config_flow": true, "config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/aemet", "documentation": "https://www.home-assistant.io/integrations/aemet",
"requirements": ["AEMET-OpenData==0.2.1"], "requirements": ["AEMET-OpenData==0.2.1"],
"codeowners": [], "codeowners": ["@Noltari"],
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["aemet_opendata"] "loggers": ["aemet_opendata"]
} }

View File

@ -14,8 +14,7 @@
"longitude": "Longitud", "longitude": "Longitud",
"name": "Nom de la integraci\u00f3" "name": "Nom de la integraci\u00f3"
}, },
"description": "Per generar la clau API, v\u00e9s a https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Per generar la clau API, v\u00e9s a https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "L\u00e4ngengrad", "longitude": "L\u00e4ngengrad",
"name": "Name der Integration" "name": "Name der Integration"
}, },
"description": "Um den API-Schl\u00fcssel zu generieren, besuche https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Um den API-Schl\u00fcssel zu generieren, besuche https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2", "longitude": "\u0393\u03b5\u03c9\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc \u03bc\u03ae\u03ba\u03bf\u03c2",
"name": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2" "name": "\u038c\u03bd\u03bf\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2"
}, },
"description": "\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 AEMET OpenData. \u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 AEMET OpenData. \u0393\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af API \u03bc\u03b5\u03c4\u03b1\u03b2\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Longitude", "longitude": "Longitude",
"name": "Name of the integration" "name": "Name of the integration"
}, },
"description": "To generate API key go to https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "To generate API key go to https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -5,8 +5,7 @@
"data": { "data": {
"name": "Nombre de la integraci\u00f3n" "name": "Nombre de la integraci\u00f3n"
}, },
"description": "Configure la integraci\u00f3n de AEMET OpenData. Para generar la clave API vaya a https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Configure la integraci\u00f3n de AEMET OpenData. Para generar la clave API vaya a https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Longitud", "longitude": "Longitud",
"name": "Nombre de la integraci\u00f3n" "name": "Nombre de la integraci\u00f3n"
}, },
"description": "Configurar la integraci\u00f3n de AEMET OpenData. Para generar la clave API, ve a https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Configurar la integraci\u00f3n de AEMET OpenData. Para generar la clave API, ve a https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Pikkuskraad", "longitude": "Pikkuskraad",
"name": "Sidumise nimi" "name": "Sidumise nimi"
}, },
"description": "API-v\u00f5tme loomiseks mine aadressile https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "API-v\u00f5tme loomiseks mine aadressile https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Longitude", "longitude": "Longitude",
"name": "Nom de l'int\u00e9gration" "name": "Nom de l'int\u00e9gration"
}, },
"description": "Pour g\u00e9n\u00e9rer une cl\u00e9 d'API, rendez-vous sur https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Pour g\u00e9n\u00e9rer une cl\u00e9 d'API, rendez-vous sur https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Hossz\u00fas\u00e1g", "longitude": "Hossz\u00fas\u00e1g",
"name": "Az integr\u00e1ci\u00f3 neve" "name": "Az integr\u00e1ci\u00f3 neve"
}, },
"description": "Az API-kulcs l\u00e9trehoz\u00e1s\u00e1hoz keresse fel a https://opendata.aemet.es/centrodedescargas/altaUsuario webhelyet", "description": "Az API-kulcs l\u00e9trehoz\u00e1s\u00e1hoz keresse fel a https://opendata.aemet.es/centrodedescargas/altaUsuario webhelyet"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Bujur", "longitude": "Bujur",
"name": "Nama integrasi" "name": "Nama integrasi"
}, },
"description": "Untuk membuat kunci API, buka https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Untuk membuat kunci API, buka https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Logitudine", "longitude": "Logitudine",
"name": "Nome dell'integrazione" "name": "Nome dell'integrazione"
}, },
"description": "Per generare la chiave API, vai su https://opendata.aemet.es/centrodescargas/altaUsuario", "description": "Per generare la chiave API, vai su https://opendata.aemet.es/centrodescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "\u7d4c\u5ea6", "longitude": "\u7d4c\u5ea6",
"name": "\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u540d\u524d" "name": "\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u540d\u524d"
}, },
"description": "AEMET OpenData\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002 API\u30ad\u30fc\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001https://opendata.aemet.es/centrodedescargas/altaUsuario \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304f\u3060\u3055\u3044", "description": "AEMET OpenData\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002 API\u30ad\u30fc\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001https://opendata.aemet.es/centrodedescargas/altaUsuario \u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u304f\u3060\u3055\u3044"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,16 @@
"longitude": "\uacbd\ub3c4", "longitude": "\uacbd\ub3c4",
"name": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c \uc774\ub984" "name": "\ud1b5\ud569 \uad6c\uc131\uc694\uc18c \uc774\ub984"
}, },
"description": "AEMET OpenData \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. API \ud0a4\ub97c \uc0dd\uc131\ud558\ub824\uba74 https://opendata.aemet.es/centrodedescargas/altaUsuario \ub85c \uc774\ub3d9\ud574\uc8fc\uc138\uc694", "description": "AEMET OpenData \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. API \ud0a4\ub97c \uc0dd\uc131\ud558\ub824\uba74 https://opendata.aemet.es/centrodedescargas/altaUsuario \ub85c \uc774\ub3d9\ud574\uc8fc\uc138\uc694"
"title": "AEMET OpenData" }
}
},
"options": {
"step": {
"init": {
"data": {
"station_updates": "AEMET \uae30\uc0c1 \uad00\uce21\uc18c\uc5d0\uc11c \ub370\uc774\ud130 \uc218\uc9d1"
}
} }
} }
} }

View File

@ -7,8 +7,7 @@
"latitude": "L\u00e4ngegrad", "latitude": "L\u00e4ngegrad",
"longitude": "Breedegrad", "longitude": "Breedegrad",
"name": "Numm vun der Integratioun" "name": "Numm vun der Integratioun"
}, }
"title": "AEMET OpenData"
} }
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"config": { "config": {
"abort": { "abort": {
"already_configured": "Locatie is al geconfigureerd." "already_configured": "Locatie is al geconfigureerd"
}, },
"error": { "error": {
"invalid_api_key": "Ongeldige API-sleutel" "invalid_api_key": "Ongeldige API-sleutel"
@ -14,8 +14,7 @@
"longitude": "Lengtegraad", "longitude": "Lengtegraad",
"name": "Naam van de integratie" "name": "Naam van de integratie"
}, },
"description": "Om een API sleutel te genereren ga naar https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Om een API sleutel te genereren ga naar https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Lengdegrad", "longitude": "Lengdegrad",
"name": "Navnet p\u00e5 integrasjonen" "name": "Navnet p\u00e5 integrasjonen"
}, },
"description": "For \u00e5 generere API-n\u00f8kkel, g\u00e5 til https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "For \u00e5 generere API-n\u00f8kkel, g\u00e5 til https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "D\u0142ugo\u015b\u0107 geograficzna", "longitude": "D\u0142ugo\u015b\u0107 geograficzna",
"name": "Nazwa integracji" "name": "Nazwa integracji"
}, },
"description": "Aby wygenerowa\u0107 klucz API, przejd\u017a do https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Aby wygenerowa\u0107 klucz API, przejd\u017a do https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Longitude", "longitude": "Longitude",
"name": "Nome da integra\u00e7\u00e3o" "name": "Nome da integra\u00e7\u00e3o"
}, },
"description": "Para gerar a chave API acesse https://opendata.aemet.es/centrodedescargas/altaUsuario", "description": "Para gerar a chave API acesse https://opendata.aemet.es/centrodedescargas/altaUsuario"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430",
"name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435" "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435"
}, },
"description": "\u0427\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\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://opendata.aemet.es/centrodedescargas/altaUsuario.", "description": "\u0427\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\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://opendata.aemet.es/centrodedescargas/altaUsuario."
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "Boylam", "longitude": "Boylam",
"name": "Entegrasyonun ad\u0131" "name": "Entegrasyonun ad\u0131"
}, },
"description": "API anahtar\u0131 olu\u015fturmak i\u00e7in https://opendata.aemet.es/centrodedescargas/altaUsuario adresine gidin.", "description": "API anahtar\u0131 olu\u015fturmak i\u00e7in https://opendata.aemet.es/centrodedescargas/altaUsuario adresine gidin."
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -14,8 +14,7 @@
"longitude": "\u7d93\u5ea6", "longitude": "\u7d93\u5ea6",
"name": "\u6574\u5408\u540d\u7a31" "name": "\u6574\u5408\u540d\u7a31"
}, },
"description": "\u8acb\u81f3 https://opendata.aemet.es/centrodedescargas/altaUsuario \u4ee5\u7522\u751f API \u91d1\u9470", "description": "\u8acb\u81f3 https://opendata.aemet.es/centrodedescargas/altaUsuario \u4ee5\u7522\u751f API \u91d1\u9470"
"title": "AEMET OpenData"
} }
} }
}, },

View File

@ -1,7 +1,7 @@
"""Support for the AEMET OpenData service.""" """Support for the AEMET OpenData service."""
from homeassistant.components.weather import WeatherEntity from homeassistant.components.weather import WeatherEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TEMP_CELSIUS from homeassistant.const import PRESSURE_HPA, SPEED_KILOMETERS_PER_HOUR, TEMP_CELSIUS
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
@ -48,6 +48,8 @@ class AemetWeather(CoordinatorEntity[WeatherUpdateCoordinator], WeatherEntity):
_attr_attribution = ATTRIBUTION _attr_attribution = ATTRIBUTION
_attr_temperature_unit = TEMP_CELSIUS _attr_temperature_unit = TEMP_CELSIUS
_attr_pressure_unit = PRESSURE_HPA
_attr_wind_speed_unit = SPEED_KILOMETERS_PER_HOUR
def __init__( def __init__(
self, self,
@ -92,10 +94,10 @@ class AemetWeather(CoordinatorEntity[WeatherUpdateCoordinator], WeatherEntity):
@property @property
def wind_bearing(self): def wind_bearing(self):
"""Return the temperature.""" """Return the wind bearing."""
return self.coordinator.data[ATTR_API_WIND_BEARING] return self.coordinator.data[ATTR_API_WIND_BEARING]
@property @property
def wind_speed(self): def wind_speed(self):
"""Return the temperature.""" """Return the wind speed."""
return self.coordinator.data[ATTR_API_WIND_SPEED] return self.coordinator.data[ATTR_API_WIND_SPEED]

View File

@ -3,13 +3,16 @@ from homeassistant.components.alarm_control_panel import (
AlarmControlPanelEntity, AlarmControlPanelEntity,
AlarmControlPanelEntityFeature, AlarmControlPanelEntityFeature,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_AWAY,
STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_HOME,
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_NIGHT,
STATE_ALARM_DISARMED, STATE_ALARM_DISARMED,
) )
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import CONNECTION, DOMAIN as AGENT_DOMAIN from .const import CONNECTION, DOMAIN as AGENT_DOMAIN
@ -23,8 +26,10 @@ CONST_ALARM_CONTROL_PANEL_NAME = "Alarm Panel"
async def async_setup_entry( async def async_setup_entry(
hass, config_entry, async_add_entities, discovery_info=None hass: HomeAssistant,
): config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Agent DVR Alarm Control Panels.""" """Set up the Agent DVR Alarm Control Panels."""
async_add_entities( async_add_entities(
[AgentBaseStation(hass.data[AGENT_DOMAIN][config_entry.entry_id][CONNECTION])] [AgentBaseStation(hass.data[AGENT_DOMAIN][config_entry.entry_id][CONNECTION])]

View File

@ -6,9 +6,14 @@ from agent import AgentError
from homeassistant.components.camera import CameraEntityFeature from homeassistant.components.camera import CameraEntityFeature
from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ATTRIBUTION from homeassistant.const import ATTR_ATTRIBUTION
from homeassistant.helpers import entity_platform from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import (
AddEntitiesCallback,
async_get_current_platform,
)
from .const import ( from .const import (
ATTRIBUTION, ATTRIBUTION,
@ -37,8 +42,10 @@ CAMERA_SERVICES = {
async def async_setup_entry( async def async_setup_entry(
hass, config_entry, async_add_entities, discovery_info=None hass: HomeAssistant,
): config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Agent cameras.""" """Set up the Agent cameras."""
filter_urllib3_logging() filter_urllib3_logging()
cameras = [] cameras = []
@ -55,7 +62,7 @@ async def async_setup_entry(
async_add_entities(cameras) async_add_entities(cameras)
platform = entity_platform.async_get_current_platform() platform = async_get_current_platform()
for service, method in CAMERA_SERVICES.items(): for service, method in CAMERA_SERVICES.items():
platform.async_register_entity_service(service, {}, method) platform.async_register_entity_service(service, {}, method)

View File

@ -4,7 +4,7 @@
"already_configured": "Apparaat is al geconfigureerd" "already_configured": "Apparaat is al geconfigureerd"
}, },
"error": { "error": {
"already_in_progress": "De configuratiestroom is al aan de gang", "already_in_progress": "De configuratie is momenteel al bezig",
"cannot_connect": "Kan geen verbinding maken" "cannot_connect": "Kan geen verbinding maken"
}, },
"step": { "step": {

Some files were not shown because too many files have changed in this diff Show More