Merge pull request #27374 from home-assistant/rc

0.100.0
This commit is contained in:
Paulus Schoutsen 2019-10-09 18:05:46 -07:00 committed by GitHub
commit e2d2f69cb0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
1904 changed files with 34664 additions and 8497 deletions

View file

@ -143,6 +143,7 @@ omit =
homeassistant/components/dlna_dmr/media_player.py
homeassistant/components/dnsip/sensor.py
homeassistant/components/dominos/*
homeassistant/components/doods/*
homeassistant/components/doorbird/*
homeassistant/components/dovado/*
homeassistant/components/downloader/*
@ -155,7 +156,12 @@ omit =
homeassistant/components/ebox/sensor.py
homeassistant/components/ebusd/*
homeassistant/components/ecoal_boiler/*
homeassistant/components/ecobee/*
homeassistant/components/ecobee/__init__.py
homeassistant/components/ecobee/binary_sensor.py
homeassistant/components/ecobee/climate.py
homeassistant/components/ecobee/notify.py
homeassistant/components/ecobee/sensor.py
homeassistant/components/ecobee/weather.py
homeassistant/components/econet/water_heater.py
homeassistant/components/ecovacs/*
homeassistant/components/eddystone_temperature/sensor.py
@ -164,7 +170,7 @@ omit =
homeassistant/components/eight_sleep/*
homeassistant/components/eliqonline/sensor.py
homeassistant/components/elkm1/*
homeassistant/components/elv/switch.py
homeassistant/components/elv/*
homeassistant/components/emby/media_player.py
homeassistant/components/emoncms/sensor.py
homeassistant/components/emoncms_history/*
@ -197,7 +203,6 @@ omit =
homeassistant/components/evohome/*
homeassistant/components/familyhub/camera.py
homeassistant/components/fastdotcom/*
homeassistant/components/fedex/sensor.py
homeassistant/components/ffmpeg/camera.py
homeassistant/components/fibaro/*
homeassistant/components/filesize/sensor.py
@ -288,11 +293,15 @@ omit =
homeassistant/components/hydrawise/*
homeassistant/components/hyperion/light.py
homeassistant/components/ialarm/alarm_control_panel.py
homeassistant/components/iaqualink/binary_sensor.py
homeassistant/components/iaqualink/climate.py
homeassistant/components/iaqualink/light.py
homeassistant/components/iaqualink/sensor.py
homeassistant/components/iaqualink/switch.py
homeassistant/components/icloud/device_tracker.py
homeassistant/components/izone/climate.py
homeassistant/components/izone/discovery.py
homeassistant/components/izone/__init__.py
homeassistant/components/idteck_prox/*
homeassistant/components/ifttt/*
homeassistant/components/iglo/light.py
@ -313,6 +322,7 @@ omit =
homeassistant/components/itunes/media_player.py
homeassistant/components/joaoapps_join/*
homeassistant/components/juicenet/*
homeassistant/components/kaiterra/*
homeassistant/components/kankun/switch.py
homeassistant/components/keba/*
homeassistant/components/keenetic_ndms2/device_tracker.py
@ -343,7 +353,6 @@ omit =
homeassistant/components/lifx_legacy/light.py
homeassistant/components/lightwave/*
homeassistant/components/limitlessled/light.py
homeassistant/components/linksys_ap/device_tracker.py
homeassistant/components/linksys_smart/device_tracker.py
homeassistant/components/linky/__init__.py
homeassistant/components/linky/sensor.py
@ -434,12 +443,14 @@ omit =
homeassistant/components/nuki/lock.py
homeassistant/components/nut/sensor.py
homeassistant/components/nx584/alarm_control_panel.py
homeassistant/components/nzbget/__init__.py
homeassistant/components/nzbget/sensor.py
homeassistant/components/obihai/*
homeassistant/components/octoprint/*
homeassistant/components/oem/climate.py
homeassistant/components/oasa_telematics/sensor.py
homeassistant/components/ohmconnect/sensor.py
homeassistant/components/ombi/*
homeassistant/components/onewire/sensor.py
homeassistant/components/onkyo/media_player.py
homeassistant/components/onvif/camera.py
@ -476,7 +487,10 @@ omit =
homeassistant/components/pioneer/media_player.py
homeassistant/components/pjlink/media_player.py
homeassistant/components/plaato/*
homeassistant/components/plex/*
homeassistant/components/plex/__init__.py
homeassistant/components/plex/media_player.py
homeassistant/components/plex/sensor.py
homeassistant/components/plex/server.py
homeassistant/components/plugwise/*
homeassistant/components/plum_lightpad/*
homeassistant/components/pocketcasts/sensor.py
@ -544,6 +558,7 @@ omit =
homeassistant/components/russound_rio/media_player.py
homeassistant/components/russound_rnet/media_player.py
homeassistant/components/sabnzbd/*
homeassistant/components/saj/sensor.py
homeassistant/components/satel_integra/*
homeassistant/components/scrape/sensor.py
homeassistant/components/scsgate/*
@ -585,6 +600,8 @@ omit =
homeassistant/components/solaredge/sensor.py
homeassistant/components/solaredge_local/sensor.py
homeassistant/components/solax/sensor.py
homeassistant/components/soma/cover.py
homeassistant/components/soma/__init__.py
homeassistant/components/somfy/*
homeassistant/components/somfy_mylink/*
homeassistant/components/sonarr/sensor.py
@ -597,7 +614,6 @@ omit =
homeassistant/components/spotcrime/sensor.py
homeassistant/components/spotify/media_player.py
homeassistant/components/squeezebox/media_player.py
homeassistant/components/srp_energy/sensor.py
homeassistant/components/starlingbank/sensor.py
homeassistant/components/steam_online/sensor.py
homeassistant/components/stiebel_eltron/*
@ -618,7 +634,6 @@ omit =
homeassistant/components/synologydsm/sensor.py
homeassistant/components/syslog/notify.py
homeassistant/components/systemmonitor/sensor.py
homeassistant/components/sytadin/sensor.py
homeassistant/components/tado/*
homeassistant/components/tado/device_tracker.py
homeassistant/components/tahoma/*
@ -660,9 +675,14 @@ omit =
homeassistant/components/trackr/device_tracker.py
homeassistant/components/tradfri/*
homeassistant/components/tradfri/light.py
homeassistant/components/tradfri/cover.py
homeassistant/components/trafikverket_train/sensor.py
homeassistant/components/trafikverket_weatherstation/sensor.py
homeassistant/components/transmission/*
homeassistant/components/transmission/__init__.py
homeassistant/components/transmission/sensor.py
homeassistant/components/transmission/switch.py
homeassistant/components/transmission/const.py
homeassistant/components/transmission/errors.py
homeassistant/components/travisci/sensor.py
homeassistant/components/tuya/*
homeassistant/components/twentemilieu/const.py
@ -678,10 +698,8 @@ omit =
homeassistant/components/upcloud/*
homeassistant/components/upnp/*
homeassistant/components/upc_connect/*
homeassistant/components/ups/sensor.py
homeassistant/components/uptimerobot/binary_sensor.py
homeassistant/components/uscis/sensor.py
homeassistant/components/usps/*
homeassistant/components/vallox/*
homeassistant/components/vasttrafik/sensor.py
homeassistant/components/velbus/__init__.py
@ -738,6 +756,7 @@ omit =
homeassistant/components/yale_smart_alarm/alarm_control_panel.py
homeassistant/components/yamaha/media_player.py
homeassistant/components/yamaha_musiccast/media_player.py
homeassistant/components/yandex_transport/*
homeassistant/components/yeelight/*
homeassistant/components/yeelightsunflower/light.py
homeassistant/components/yi/camera.py
@ -755,6 +774,7 @@ omit =
homeassistant/components/zha/core/device.py
homeassistant/components/zha/core/gateway.py
homeassistant/components/zha/core/helpers.py
homeassistant/components/zha/core/patches.py
homeassistant/components/zha/core/registries.py
homeassistant/components/zha/device_entity.py
homeassistant/components/zha/entity.py

View file

@ -8,6 +8,7 @@
"runArgs": ["-e", "GIT_EDITOR=\"code --wait\""],
"extensions": [
"ms-python.python",
"visualstudioexptteam.vscodeintellicode",
"ms-azure-devops.azure-pipelines",
"redhat.vscode-yaml",
"esbenp.prettier-vscode"

View file

@ -23,9 +23,9 @@
Please provide details about your environment.
-->
**Component/platform:**
**Integration:**
<!--
Please add the link to the documentation at https://www.home-assistant.io/components/ of the component/platform in question.
Please add the link to the documentation at https://www.home-assistant.io/integrations/ of the integration in question.
-->

View file

@ -29,9 +29,9 @@ about: Create a report to help us improve
Please provide details about your environment.
-->
**Component/platform:**
**Integration:**
<!--
Please add the link to the documentation at https://www.home-assistant.io/components/ of the component/platform in question.
Please add the link to the documentation at https://www.home-assistant.io/integrations/ of the integration in question.
-->

1
.github/stale.yml vendored
View file

@ -13,6 +13,7 @@ onlyLabels: []
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- under investigation
- Help wanted
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: true

View file

@ -30,4 +30,4 @@ matrix:
cache: pip
install: pip install -U tox
language: python
script: travis_wait 40 tox --develop
script: travis_wait 50 tox --develop

View file

@ -1,4 +1,4 @@
# This file is generated by script/manifest/codeowners.py
# This file is generated by script/hassfest/codeowners.py
# People marked here will be automatically requested for a review
# when the code that they own is touched.
# https://github.com/blog/2392-introducing-code-owners
@ -16,6 +16,7 @@ homeassistant/scripts/check_config.py @kellerza
homeassistant/components/adguard/* @frenck
homeassistant/components/airvisual/* @bachya
homeassistant/components/alarm_control_panel/* @colinodell
homeassistant/components/alexa/* @home-assistant/cloud
homeassistant/components/alpha_vantage/* @fabaff
homeassistant/components/amazon_polly/* @robbiet480
homeassistant/components/ambiclimate/* @danielhiversen
@ -73,6 +74,7 @@ homeassistant/components/digital_ocean/* @fabaff
homeassistant/components/discogs/* @thibmaek
homeassistant/components/doorbird/* @oblogic7
homeassistant/components/dweet/* @fabaff
homeassistant/components/ecobee/* @marthoc
homeassistant/components/ecovacs/* @OverloadUT
homeassistant/components/egardia/* @jeroenterheerdt
homeassistant/components/eight_sleep/* @mezz64
@ -105,6 +107,7 @@ homeassistant/components/geonetnz_quakes/* @exxamalte
homeassistant/components/gitter/* @fabaff
homeassistant/components/glances/* @fabaff
homeassistant/components/gntp/* @robbiet480
homeassistant/components/google_assistant/* @home-assistant/cloud
homeassistant/components/google_cloud/* @lufton
homeassistant/components/google_translate/* @awarecan
homeassistant/components/google_travel_time/* @robbiet480
@ -115,6 +118,7 @@ homeassistant/components/gtfs/* @robbiet480
homeassistant/components/harmony/* @ehendrix23
homeassistant/components/hassio/* @home-assistant/hass-io
homeassistant/components/heos/* @andrewsayre
homeassistant/components/here_travel_time/* @eifinger
homeassistant/components/hikvision/* @mezz64
homeassistant/components/hikvisioncam/* @fbradyirl
homeassistant/components/history/* @home-assistant/core
@ -144,7 +148,9 @@ homeassistant/components/ios/* @robbiet480
homeassistant/components/ipma/* @dgomes
homeassistant/components/iqvia/* @bachya
homeassistant/components/irish_rail_transport/* @ttroy50
homeassistant/components/izone/* @Swamp-Ig
homeassistant/components/jewish_calendar/* @tsvi
homeassistant/components/kaiterra/* @Michsior14
homeassistant/components/keba/* @dannerph
homeassistant/components/knx/* @Julius2342
homeassistant/components/kodi/* @armills
@ -153,9 +159,6 @@ homeassistant/components/lametric/* @robbiet480
homeassistant/components/launch_library/* @ludeeus
homeassistant/components/lcn/* @alengwenus
homeassistant/components/life360/* @pnbruckner
homeassistant/components/lifx/* @amelchio
homeassistant/components/lifx_cloud/* @amelchio
homeassistant/components/lifx_legacy/* @amelchio
homeassistant/components/linky/* @Quentame
homeassistant/components/linux_battery/* @fabaff
homeassistant/components/liveboxplaytv/* @pschmitt
@ -181,12 +184,12 @@ homeassistant/components/monoprice/* @etsinko
homeassistant/components/moon/* @fabaff
homeassistant/components/mpd/* @fabaff
homeassistant/components/mqtt/* @home-assistant/core
homeassistant/components/mysensors/* @MartinHjelmare
homeassistant/components/mystrom/* @fabaff
homeassistant/components/nello/* @pschmitt
homeassistant/components/ness_alarm/* @nickw444
homeassistant/components/nest/* @awarecan
homeassistant/components/netdata/* @fabaff
homeassistant/components/netgear_lte/* @amelchio
homeassistant/components/nextbus/* @vividboarder
homeassistant/components/nissan_leaf/* @filcole
homeassistant/components/nmbs/* @thibmaek
@ -197,8 +200,10 @@ homeassistant/components/nsw_fuel_station/* @nickw444
homeassistant/components/nsw_rural_fire_service_feed/* @exxamalte
homeassistant/components/nuki/* @pvizeli
homeassistant/components/nws/* @MatthewFlamm
homeassistant/components/nzbget/* @chriscla
homeassistant/components/obihai/* @dshokouhi
homeassistant/components/ohmconnect/* @robbiet480
homeassistant/components/ombi/* @larssont
homeassistant/components/onboarding/* @home-assistant/core
homeassistant/components/opentherm_gw/* @mvn23
homeassistant/components/openuv/* @bachya
@ -209,7 +214,7 @@ homeassistant/components/panel_custom/* @home-assistant/frontend
homeassistant/components/panel_iframe/* @home-assistant/frontend
homeassistant/components/persistent_notification/* @home-assistant/core
homeassistant/components/philips_js/* @elupus
homeassistant/components/pi_hole/* @fabaff
homeassistant/components/pi_hole/* @fabaff @johnluetke
homeassistant/components/plaato/* @JohNan
homeassistant/components/plant/* @ChristianKuehnel
homeassistant/components/plex/* @jjlawren
@ -223,6 +228,7 @@ homeassistant/components/qld_bushfire/* @exxamalte
homeassistant/components/qnap/* @colinodell
homeassistant/components/quantum_gateway/* @cisasteelersfan
homeassistant/components/qwikswitch/* @kellerza
homeassistant/components/rainbird/* @konikvranik
homeassistant/components/raincloud/* @vanstinator
homeassistant/components/rainforest_eagle/* @gtdiehl
homeassistant/components/rainmachine/* @bachya
@ -231,6 +237,7 @@ homeassistant/components/repetier/* @MTrab
homeassistant/components/rfxtrx/* @danielhiversen
homeassistant/components/rmvtransport/* @cgtobi
homeassistant/components/roomba/* @pschmitt
homeassistant/components/saj/* @fredericvl
homeassistant/components/scene/* @home-assistant/core
homeassistant/components/scrape/* @fabaff
homeassistant/components/script/* @home-assistant/core
@ -248,11 +255,11 @@ homeassistant/components/smarthab/* @outadoc
homeassistant/components/smartthings/* @andrewsayre
homeassistant/components/smarty/* @z0mbieprocess
homeassistant/components/smtp/* @fabaff
homeassistant/components/solaredge_local/* @drobtravels
homeassistant/components/solaredge_local/* @drobtravels @scheric
homeassistant/components/solax/* @squishykid
homeassistant/components/soma/* @ratsept
homeassistant/components/somfy/* @tetienne
homeassistant/components/songpal/* @rytilahti
homeassistant/components/sonos/* @amelchio
homeassistant/components/spaceapi/* @fabaff
homeassistant/components/spider/* @peternijssen
homeassistant/components/sql/* @dgomes
@ -270,7 +277,6 @@ homeassistant/components/switchmate/* @danielhiversen
homeassistant/components/syncthru/* @nielstron
homeassistant/components/synology_srm/* @aerialls
homeassistant/components/syslog/* @fabaff
homeassistant/components/sytadin/* @gautric
homeassistant/components/tahoma/* @philklei
homeassistant/components/tautulli/* @ludeeus
homeassistant/components/tellduslive/* @fredrike
@ -282,11 +288,13 @@ homeassistant/components/threshold/* @fabaff
homeassistant/components/tibber/* @danielhiversen
homeassistant/components/tile/* @bachya
homeassistant/components/time_date/* @fabaff
homeassistant/components/todoist/* @boralyl
homeassistant/components/toon/* @frenck
homeassistant/components/tplink/* @rytilahti
homeassistant/components/traccar/* @ludeeus
homeassistant/components/tradfri/* @ggravlingen
homeassistant/components/trafikverket_train/* @endor-force
homeassistant/components/transmission/* @engrbm87
homeassistant/components/tts/* @robbiet480
homeassistant/components/twentemilieu/* @frenck
homeassistant/components/twilio_call/* @robbiet480
@ -315,12 +323,14 @@ homeassistant/components/wemo/* @sqldiablo
homeassistant/components/withings/* @vangorra
homeassistant/components/worldclock/* @fabaff
homeassistant/components/wwlln/* @bachya
homeassistant/components/xbox_live/* @MartinHjelmare
homeassistant/components/xfinity/* @cisasteelersfan
homeassistant/components/xiaomi_aqara/* @danielhiversen @syssi
homeassistant/components/xiaomi_miio/* @rytilahti @syssi
homeassistant/components/xiaomi_tv/* @simse
homeassistant/components/xmpp/* @fabaff @flowolf
homeassistant/components/yamaha_musiccast/* @jalmeroth
homeassistant/components/yandex_transport/* @rishatik92
homeassistant/components/yeelight/* @rytilahti @zewelor
homeassistant/components/yeelightsunflower/* @lindsaymarkward
homeassistant/components/yessssms/* @flowolf

View file

@ -32,4 +32,4 @@ of a component, check the `Home Assistant help section <https://home-assistant.i
.. |screenshot-states| image:: https://raw.github.com/home-assistant/home-assistant/master/docs/screenshots.png
:target: https://home-assistant.io/demo/
.. |screenshot-components| image:: https://raw.github.com/home-assistant/home-assistant/dev/docs/screenshot-components.png
:target: https://home-assistant.io/components/
:target: https://home-assistant.io/integrations/

View file

@ -112,6 +112,8 @@ stages:
# Find offending deps with `pipdeptree -r -p typing`
pip uninstall -y typing
- script: |
set -e
. venv/bin/activate
pytest --timeout=9 --durations=10 -qq -o console_output_style=count -p no:sugar tests
script/check_dirty

View file

@ -233,3 +233,45 @@ stages:
fi
displayName: 'Create Meta-Image'
- stage: 'Addidional'
jobs:
- job: 'Updater'
pool:
vmImage: 'ubuntu-latest'
variables:
- group: gcloud
steps:
- template: templates/azp-step-ha-version.yaml@azure
- script: |
set -e
export CLOUDSDK_CORE_DISABLE_PROMPTS=1
curl -o google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
tar -C . -xvf google-cloud-sdk.tar.gz
rm -f google-cloud-sdk.tar.gz
./google-cloud-sdk/install.sh
displayName: 'Setup gCloud'
condition: eq(variables['homeassistantReleaseStable'], 'true')
- script: |
set -e
export CLOUDSDK_CORE_DISABLE_PROMPTS=1
echo "$(gcloudAnalytic)" > gcloud_auth.json
./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file gcloud_auth.json
rm -f gcloud_auth.json
displayName: 'Auth gCloud'
condition: eq(variables['homeassistantReleaseStable'], 'true')
- script: |
set -e
export CLOUDSDK_CORE_DISABLE_PROMPTS=1
./google-cloud-sdk/bin/gcloud functions deploy Analytics-Receiver \
--project home-assistant-analytics \
--update-env-vars VERSION=$(homeassistantRelease) \
--source gs://analytics-src/function-source.zip
displayName: 'Push details to updater'
condition: eq(variables['homeassistantReleaseStable'], 'true')

View file

@ -45,7 +45,6 @@ jobs:
requirement_files="requirements_wheels.txt requirements_diff.txt"
for requirement_file in ${requirement_files}; do
sed -i "s|# pytradfri|pytradfri|g" ${requirement_file}
sed -i "s|# pybluez|pybluez|g" ${requirement_file}
sed -i "s|# bluepy|bluepy|g" ${requirement_file}
sed -i "s|# beacontools|beacontools|g" ${requirement_file}
@ -63,9 +62,15 @@ jobs:
sed -i "s|# homekit|homekit|g" ${requirement_file}
sed -i "s|# decora_wifi|decora_wifi|g" ${requirement_file}
sed -i "s|# decora|decora|g" ${requirement_file}
sed -i "s|# avion|avion|g" ${requirement_file}
sed -i "s|# PySwitchbot|PySwitchbot|g" ${requirement_file}
sed -i "s|# pySwitchmate|pySwitchmate|g" ${requirement_file}
sed -i "s|# face_recognition|face_recognition|g" ${requirement_file}
sed -i "s|# py_noaa|py_noaa|g" ${requirement_file}
sed -i "s|# bme680|bme680|g" ${requirement_file}
if [[ "$(buildArch)" =~ arm ]]; then
sed -i "s|# VL53L1X|VL53L1X|g" ${requirement_file}
fi
done
displayName: 'Prepare requirements files for Hass.io'

View file

@ -1,6 +1,4 @@
"""Start Home Assistant."""
from __future__ import print_function
import argparse
import os
import platform

View file

@ -22,7 +22,7 @@ from . import (
SetupFlow,
)
REQUIREMENTS = ["pyotp==2.2.7"]
REQUIREMENTS = ["pyotp==2.3.0"]
CONF_MESSAGE = "message"
@ -251,8 +251,10 @@ class NotifyAuthModule(MultiFactorAuthModule):
_LOGGER.error("Cannot find user %s", user_id)
return
await self.async_notify( # type: ignore
code, notify_setting.notify_service, notify_setting.target
await self.async_notify(
code,
notify_setting.notify_service, # type: ignore
notify_setting.target,
)
async def async_notify(

View file

@ -16,7 +16,7 @@ from . import (
SetupFlow,
)
REQUIREMENTS = ["pyotp==2.2.7", "PyQRCode==1.2.1"]
REQUIREMENTS = ["pyotp==2.3.0", "PyQRCode==1.2.1"]
CONFIG_SCHEMA = MULTI_FACTOR_AUTH_MODULE_SCHEMA.extend({}, extra=vol.PREVENT_EXTRA)
@ -215,8 +215,9 @@ class TotpSetupFlow(SetupFlow):
else:
hass = self._auth_module.hass
self._ota_secret, self._url, self._image = await hass.async_add_executor_job( # type: ignore
_generate_secret_and_qr_code, str(self._user.name)
self._ota_secret, self._url, self._image = await hass.async_add_executor_job(
_generate_secret_and_qr_code, # type: ignore
str(self._user.name),
)
return self.async_show_form(

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "La clau API no \u00e9s correcta.",
"name_exists": "El nom ja existeix.",
"wrong_location": "No hi ha estacions de mesura Airly en aquesta zona."
},
"step": {
"user": {
"data": {
"api_key": "Clau API d'Airly",
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Nom de la integraci\u00f3"
},
"description": "Configura una integraci\u00f3 de qualitat d\u2019aire Airly. Per generar la clau API, v\u00e9s a https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "API-n\u00f8glen er ikke korrekt.",
"name_exists": "Navnet findes allerede.",
"wrong_location": "Ingen Airly m\u00e5lestationer i dette omr\u00e5de."
},
"step": {
"user": {
"data": {
"api_key": "Airly API-n\u00f8gle",
"latitude": "Breddegrad",
"longitude": "L\u00e6ngdegrad",
"name": "Integrationens navn"
},
"description": "Konfigurer Airly luftkvalitet integration. For at generere API-n\u00f8gle, g\u00e5 til https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,18 @@
{
"config": {
"error": {
"name_exists": "Name existiert bereits"
},
"step": {
"user": {
"data": {
"latitude": "Breitengrad",
"longitude": "L\u00e4ngengrad",
"name": "Name der Integration"
},
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "API key is not correct.",
"name_exists": "Name already exists.",
"wrong_location": "No Airly measuring stations in this area."
},
"step": {
"user": {
"data": {
"api_key": "Airly API key",
"latitude": "Latitude",
"longitude": "Longitude",
"name": "Name of the integration"
},
"description": "Set up Airly air quality integration. To generate API key go to https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "La clave de la API no es correcta.",
"name_exists": "El nombre ya existe.",
"wrong_location": "No hay estaciones de medici\u00f3n Airly en esta zona."
},
"step": {
"user": {
"data": {
"api_key": "Clave API de Airly",
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Nombre de la integraci\u00f3n"
},
"description": "Establecer la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave de la API vaya a https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,21 @@
{
"config": {
"error": {
"auth": "La cl\u00e9 API n'est pas correcte.",
"name_exists": "Le nom existe d\u00e9j\u00e0.",
"wrong_location": "Aucune station de mesure Airly dans cette zone."
},
"step": {
"user": {
"data": {
"api_key": "Cl\u00e9 API Airly",
"latitude": "Latitude",
"longitude": "Longitude",
"name": "Nom de l'int\u00e9gration"
},
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "La chiave API non \u00e8 corretta.",
"name_exists": "Il nome \u00e8 gi\u00e0 esistente",
"wrong_location": "Nessuna stazione di misurazione Airly in quest'area."
},
"step": {
"user": {
"data": {
"api_key": "Chiave API Airly",
"latitude": "Latitudine",
"longitude": "Logitudine",
"name": "Nome dell'integrazione"
},
"description": "Configurazione dell'integrazione della qualit\u00e0 dell'aria Airly. Per generare la chiave API andare su https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "Api Schl\u00ebssel ass net korrekt.",
"name_exists": "Numm g\u00ebtt et schonn",
"wrong_location": "Keng Airly Moos Statioun an d\u00ebsem Ber\u00e4ich"
},
"step": {
"user": {
"data": {
"api_key": "Airly API Schl\u00ebssel",
"latitude": "Breedegrad",
"longitude": "L\u00e4ngegrad",
"name": "Numm vun der Installatioun"
},
"description": "Airly Loft Qualit\u00e9it Integratioun ariichten. Fir een API Schl\u00ebssel z'erstelle gitt op https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,10 @@
{
"config": {
"step": {
"user": {
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "API-n\u00f8kkelen er ikke korrekt.",
"name_exists": "Navnet finnes allerede.",
"wrong_location": "Ingen Airly m\u00e5lestasjoner i dette omr\u00e5det."
},
"step": {
"user": {
"data": {
"api_key": "Airly API-n\u00f8kkel",
"latitude": "Breddegrad",
"longitude": "Lengdegrad",
"name": "Navn p\u00e5 integrasjonen"
},
"description": "Sett opp Airly luftkvalitet integrering. For \u00e5 generere API-n\u00f8kkel g\u00e5 til https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "Klucz API jest nieprawid\u0142owy.",
"name_exists": "Nazwa ju\u017c istnieje.",
"wrong_location": "Brak stacji pomiarowych Airly w tym rejonie."
},
"step": {
"user": {
"data": {
"api_key": "Klucz API Airly",
"latitude": "Szeroko\u015b\u0107 geograficzna",
"longitude": "D\u0142ugo\u015b\u0107 geograficzna",
"name": "Nazwa integracji"
},
"description": "Konfiguracja integracji Airly. By wygenerowa\u0107 klucz API, przejd\u017a na stron\u0119 https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API.",
"name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.",
"wrong_location": "\u0412 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0446\u0438\u0439 Airly."
},
"step": {
"user": {
"data": {
"api_key": "\u041a\u043b\u044e\u0447 API",
"latitude": "\u0428\u0438\u0440\u043e\u0442\u0430",
"longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430",
"name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435"
},
"description": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 Airly. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u044e\u0447 API, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 https://developer.airly.eu/register.",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "Klju\u010d API ni pravilen.",
"name_exists": "Ime \u017ee obstaja",
"wrong_location": "Na tem obmo\u010dju ni merilnih postaj Airly."
},
"step": {
"user": {
"data": {
"api_key": "Airly API klju\u010d",
"latitude": "Zemljepisna \u0161irina",
"longitude": "Zemljepisna dol\u017eina",
"name": "Ime integracije"
},
"description": "Nastavite Airly integracijo za kakovost zraka. \u010ce \u017eelite ustvariti API klju\u010d pojdite na https://developer.airly.eu/register",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -0,0 +1,22 @@
{
"config": {
"error": {
"auth": "API \u5bc6\u9470\u4e0d\u6b63\u78ba\u3002",
"name_exists": "\u8a72\u540d\u7a31\u5df2\u5b58\u5728",
"wrong_location": "\u8a72\u5340\u57df\u6c92\u6709 Arily \u76e3\u6e2c\u7ad9\u3002"
},
"step": {
"user": {
"data": {
"api_key": "Airly API \u5bc6\u9470",
"latitude": "\u7def\u5ea6",
"longitude": "\u7d93\u5ea6",
"name": "\u6574\u5408\u540d\u7a31"
},
"description": "\u6b32\u8a2d\u5b9a Airly \u7a7a\u6c23\u54c1\u8cea\u6574\u5408\u3002\u8acb\u81f3 https://developer.airly.eu/register \u7522\u751f API \u5bc6\u9470",
"title": "Airly"
}
},
"title": "Airly"
}
}

View file

@ -1,7 +1,7 @@
{
"domain": "abode",
"name": "Abode",
"documentation": "https://www.home-assistant.io/components/abode",
"documentation": "https://www.home-assistant.io/integrations/abode",
"requirements": [
"abodepy==0.15.0"
],

View file

@ -1,7 +1,7 @@
{
"domain": "acer_projector",
"name": "Acer projector",
"documentation": "https://www.home-assistant.io/components/acer_projector",
"documentation": "https://www.home-assistant.io/integrations/acer_projector",
"requirements": [
"pyserial==3.1.1"
],

View file

@ -1,7 +1,7 @@
{
"domain": "actiontec",
"name": "Actiontec",
"documentation": "https://www.home-assistant.io/components/actiontec",
"documentation": "https://www.home-assistant.io/integrations/actiontec",
"requirements": [],
"dependencies": [],
"codeowners": []

View file

@ -9,7 +9,7 @@
},
"step": {
"hassio_confirm": {
"description": "Vil du konfigurere Home Assistant til at oprette forbindelse til Adguard Home, der leveres af Hass.io add-on: {addon}?",
"description": "Vil du konfigurere Home Assistant til at oprette forbindelse til AdGuard Home, der leveres af Hass.io add-on: {addon}?",
"title": "AdGuard Home via Hass.io add-on"
},
"user": {

View file

@ -0,0 +1,13 @@
{
"config": {
"step": {
"user": {
"data": {
"password": "Jelsz\u00f3",
"port": "Port",
"username": "Felhaszn\u00e1l\u00f3n\u00e9v"
}
}
}
}
}

View file

@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "Brukarnamn"
}
}
}
}
}

View file

@ -2,7 +2,7 @@
"config": {
"abort": {
"existing_instance_updated": "Oppdatert eksisterende konfigurasjon.",
"single_instance_allowed": "Kun \u00e9n enkelt konfigurasjon av AdGuard Hjemer tillatt."
"single_instance_allowed": "Kun en konfigurasjon av AdGuard Hjemer tillatt."
},
"error": {
"connection_error": "Tilkobling mislyktes."

View file

@ -22,7 +22,7 @@
"verify_ssl": "AdGuard Home u\u017cywa odpowiedniego certyfikatu."
},
"description": "Skonfiguruj instancj\u0119 AdGuard Home, aby umo\u017cliwi\u0107 monitorowanie i kontrol\u0119.",
"title": "Po\u0142\u0105cz sw\u00f3j AdGuard Home"
"title": "Po\u0142\u0105cz AdGuard Home"
}
},
"title": "AdGuard Home"

View file

@ -9,7 +9,7 @@
},
"step": {
"hassio_confirm": {
"description": "\u017delite konfigurirati Home Assistant-a za povezavo z AdGuard Home, ki ga ponuja hass.io add-on {addon} ?",
"description": "\u017delite konfigurirati Home Assistant-a za povezavo z AdGuard Home, ki ga ponuja Hass.io add-on {addon} ?",
"title": "AdGuard Home preko dodatka Hass.io"
},
"user": {

View file

@ -2,7 +2,7 @@
"domain": "adguard",
"name": "AdGuard Home",
"config_flow": true,
"documentation": "https://www.home-assistant.io/components/adguard",
"documentation": "https://www.home-assistant.io/integrations/adguard",
"requirements": [
"adguardhome==0.2.1"
],

View file

@ -1,7 +1,7 @@
{
"domain": "ads",
"name": "Ads",
"documentation": "https://www.home-assistant.io/components/ads",
"documentation": "https://www.home-assistant.io/integrations/ads",
"requirements": [
"pyads==3.0.7"
],

View file

@ -1,7 +1,7 @@
{
"domain": "aftership",
"name": "Aftership",
"documentation": "https://www.home-assistant.io/components/aftership",
"documentation": "https://www.home-assistant.io/integrations/aftership",
"requirements": [
"pyaftership==0.1.2"
],

View file

@ -1,7 +1,7 @@
{
"domain": "air_quality",
"name": "Air quality",
"documentation": "https://www.home-assistant.io/components/air_quality",
"documentation": "https://www.home-assistant.io/integrations/air_quality",
"requirements": [],
"dependencies": [],
"codeowners": []

View file

@ -1,7 +1,7 @@
{
"domain": "airvisual",
"name": "Airvisual",
"documentation": "https://www.home-assistant.io/components/airvisual",
"documentation": "https://www.home-assistant.io/integrations/airvisual",
"requirements": [
"pyairvisual==3.0.1"
],

View file

@ -1,7 +1,7 @@
{
"domain": "aladdin_connect",
"name": "Aladdin connect",
"documentation": "https://www.home-assistant.io/components/aladdin_connect",
"documentation": "https://www.home-assistant.io/integrations/aladdin_connect",
"requirements": [
"aladdin_connect==0.3"
],

View file

@ -1,7 +1,7 @@
{
"domain": "alarm_control_panel",
"name": "Alarm control panel",
"documentation": "https://www.home-assistant.io/components/alarm_control_panel",
"documentation": "https://www.home-assistant.io/integrations/alarm_control_panel",
"requirements": [],
"dependencies": [],
"codeowners": [

View file

@ -1,7 +1,7 @@
{
"domain": "alarmdecoder",
"name": "Alarmdecoder",
"documentation": "https://www.home-assistant.io/components/alarmdecoder",
"documentation": "https://www.home-assistant.io/integrations/alarmdecoder",
"requirements": [
"alarmdecoder==1.13.2"
],

View file

@ -1,7 +1,7 @@
{
"domain": "alarmdotcom",
"name": "Alarmdotcom",
"documentation": "https://www.home-assistant.io/components/alarmdotcom",
"documentation": "https://www.home-assistant.io/integrations/alarmdotcom",
"requirements": [
"pyalarmdotcom==0.3.2"
],

View file

@ -1,7 +1,7 @@
{
"domain": "alert",
"name": "Alert",
"documentation": "https://www.home-assistant.io/components/alert",
"documentation": "https://www.home-assistant.io/integrations/alert",
"requirements": [],
"dependencies": [],
"after_dependencies": [

View file

@ -1,5 +1,4 @@
"""Alexa capabilities."""
from datetime import datetime
import logging
from homeassistant.const import (
@ -16,6 +15,7 @@ from homeassistant.const import (
import homeassistant.components.climate.const as climate
from homeassistant.components import light, fan, cover
import homeassistant.util.color as color_util
import homeassistant.util.dt as dt_util
from .const import (
API_TEMP_UNITS,
@ -109,7 +109,7 @@ class AlexaCapibility:
"name": prop_name,
"namespace": self.name(),
"value": prop_value,
"timeOfSample": datetime.now().strftime(DATE_FORMAT),
"timeOfSample": dt_util.utcnow().strftime(DATE_FORMAT),
"uncertaintyInMilliseconds": 0,
}
@ -326,7 +326,7 @@ class AlexaColorTemperatureController(AlexaCapibility):
return color_util.color_temperature_mired_to_kelvin(
self.entity.attributes["color_temp"]
)
return 0
return None
class AlexaPercentageController(AlexaCapibility):
@ -445,7 +445,7 @@ class AlexaTemperatureSensor(AlexaCapibility):
unit = self.hass.config.units.temperature_unit
temp = self.entity.attributes.get(climate.ATTR_CURRENT_TEMPERATURE)
if temp in (STATE_UNAVAILABLE, STATE_UNKNOWN):
if temp in (STATE_UNAVAILABLE, STATE_UNKNOWN, None):
return None
try:
@ -572,6 +572,9 @@ class AlexaThermostatController(AlexaCapibility):
def get_property(self, name):
"""Read and return a property."""
if self.entity.state == STATE_UNAVAILABLE:
return None
if name == "thermostatMode":
preset = self.entity.attributes.get(climate.ATTR_PRESET_MODE)

View file

@ -52,6 +52,8 @@ from .capabilities import (
ENTITY_ADAPTERS = Registry()
TRANSLATION_TABLE = dict.fromkeys(map(ord, r"}{\/|\"()[]+~!><*%"), None)
class DisplayCategory:
"""Possible display categories for Discovery response.
@ -74,9 +76,18 @@ class DisplayCategory:
# Indicates a door.
DOOR = "DOOR"
# Indicates a doorbell.
DOOR_BELL = "DOORBELL"
# Indicates a fan.
FAN = "FAN"
# Indicates light sources or fixtures.
LIGHT = "LIGHT"
# Indicates a microwave oven.
MICROWAVE = "MICROWAVE"
# Indicates an endpoint that detects and reports motion.
MOTION_SENSOR = "MOTION_SENSOR"
@ -89,6 +100,9 @@ class DisplayCategory:
# order is unimportant. Applies to Scenes
SCENE_TRIGGER = "SCENE_TRIGGER"
# Indicates a security panel.
SECURITY_PANEL = "SECURITY_PANEL"
# Indicates an endpoint that locks.
SMARTLOCK = "SMARTLOCK"
@ -134,15 +148,18 @@ class AlexaEntity:
def friendly_name(self):
"""Return the Alexa API friendly name."""
return self.entity_conf.get(CONF_NAME, self.entity.name)
return self.entity_conf.get(CONF_NAME, self.entity.name).translate(
TRANSLATION_TABLE
)
def description(self):
"""Return the Alexa API description."""
return self.entity_conf.get(CONF_DESCRIPTION, self.entity.entity_id)
description = self.entity_conf.get(CONF_DESCRIPTION) or self.entity_id
return f"{description} via Home Assistant".translate(TRANSLATION_TABLE)
def alexa_id(self):
"""Return the Alexa API entity id."""
return self.entity.entity_id.replace(".", "#")
return self.entity.entity_id.replace(".", "#").translate(TRANSLATION_TABLE)
def display_categories(self):
"""Return a list of display categories."""
@ -319,7 +336,7 @@ class FanCapabilities(AlexaEntity):
def default_display_categories(self):
"""Return the display categories for this entity."""
return [DisplayCategory.OTHER]
return [DisplayCategory.FAN]
def interfaces(self):
"""Yield the supported interfaces."""
@ -389,10 +406,11 @@ class SceneCapabilities(AlexaEntity):
"""Class to represent Scene capabilities."""
def description(self):
"""Return the description of the entity."""
# Required description as per Amazon Scene docs
scene_fmt = "{} (Scene connected via Home Assistant)"
return scene_fmt.format(AlexaEntity.description(self))
"""Return the Alexa API description."""
description = AlexaEntity.description(self)
if "scene" not in description.casefold():
return f"{description} (Scene)"
return description
def default_display_categories(self):
"""Return the display categories for this entity."""

View file

@ -1,9 +1,9 @@
"""Support for Alexa skill service end point."""
import copy
from datetime import datetime
import logging
import uuid
import homeassistant.util.dt as dt_util
from homeassistant.components import http
from homeassistant.core import callback
from homeassistant.helpers import template
@ -89,7 +89,7 @@ class AlexaFlashBriefingView(http.HomeAssistantView):
else:
output[ATTR_REDIRECTION_URL] = item.get(CONF_DISPLAY_URL)
output[ATTR_UPDATE_DATE] = datetime.now().strftime(DATE_FORMAT)
output[ATTR_UPDATE_DATE] = dt_util.utcnow().strftime(DATE_FORMAT)
briefing.append(output)

View file

@ -1,5 +1,4 @@
"""Alexa message handlers."""
from datetime import datetime
import logging
import math
@ -28,6 +27,7 @@ from homeassistant.const import (
TEMP_FAHRENHEIT,
)
import homeassistant.util.color as color_util
import homeassistant.util.dt as dt_util
from homeassistant.util.decorator import Registry
from homeassistant.util.temperature import convert as convert_temperature
@ -275,7 +275,7 @@ async def async_api_activate(hass, config, directive, context):
payload = {
"cause": {"type": Cause.VOICE_INTERACTION},
"timestamp": "%sZ" % (datetime.utcnow().isoformat(),),
"timestamp": f"{dt_util.utcnow().replace(tzinfo=None).isoformat()}Z",
}
return directive.response(
@ -299,7 +299,7 @@ async def async_api_deactivate(hass, config, directive, context):
payload = {
"cause": {"type": Cause.VOICE_INTERACTION},
"timestamp": "%sZ" % (datetime.utcnow().isoformat(),),
"timestamp": f"{dt_util.utcnow().replace(tzinfo=None).isoformat()}Z",
}
return directive.response(

View file

@ -1,10 +1,8 @@
{
"domain": "alexa",
"name": "Alexa",
"documentation": "https://www.home-assistant.io/components/alexa",
"documentation": "https://www.home-assistant.io/integrations/alexa",
"requirements": [],
"dependencies": [
"http"
],
"codeowners": []
"dependencies": ["http"],
"codeowners": ["@home-assistant/cloud"]
}

View file

@ -131,6 +131,10 @@ async def async_send_add_or_update_message(hass, config, entity_ids):
for entity_id in entity_ids:
domain = entity_id.split(".", 1)[0]
if domain not in ENTITY_ADAPTERS:
continue
alexa_entity = ENTITY_ADAPTERS[domain](hass, config, hass.states.get(entity_id))
endpoints.append(alexa_entity.serialize_discovery())
@ -161,6 +165,10 @@ async def async_send_delete_message(hass, config, entity_ids):
for entity_id in entity_ids:
domain = entity_id.split(".", 1)[0]
if domain not in ENTITY_ADAPTERS:
continue
alexa_entity = ENTITY_ADAPTERS[domain](hass, config, hass.states.get(entity_id))
endpoints.append({"endpointId": alexa_entity.alexa_id()})

View file

@ -1,7 +1,7 @@
{
"domain": "alpha_vantage",
"name": "Alpha vantage",
"documentation": "https://www.home-assistant.io/components/alpha_vantage",
"documentation": "https://www.home-assistant.io/integrations/alpha_vantage",
"requirements": [
"alpha_vantage==2.1.0"
],

View file

@ -1,9 +1,9 @@
{
"domain": "amazon_polly",
"name": "Amazon polly",
"documentation": "https://www.home-assistant.io/components/amazon_polly",
"documentation": "https://www.home-assistant.io/integrations/amazon_polly",
"requirements": [
"boto3==1.9.16"
"boto3==1.9.233"
],
"dependencies": [],
"codeowners": [

View file

@ -33,6 +33,7 @@ SUPPORTED_REGIONS = [
"sa-east-1",
]
CONF_ENGINE = "engine"
CONF_VOICE = "voice"
CONF_OUTPUT_FORMAT = "output_format"
CONF_SAMPLE_RATE = "sample_rate"
@ -101,10 +102,12 @@ SUPPORTED_VOICES = [
SUPPORTED_OUTPUT_FORMATS = ["mp3", "ogg_vorbis", "pcm"]
SUPPORTED_SAMPLE_RATES = ["8000", "16000", "22050"]
SUPPORTED_ENGINES = ["neural", "standard"]
SUPPORTED_SAMPLE_RATES = ["8000", "16000", "22050", "24000"]
SUPPORTED_SAMPLE_RATES_MAP = {
"mp3": ["8000", "16000", "22050"],
"mp3": ["8000", "16000", "22050", "24000"],
"ogg_vorbis": ["8000", "16000", "22050"],
"pcm": ["8000", "16000"],
}
@ -113,6 +116,7 @@ SUPPORTED_TEXT_TYPES = ["text", "ssml"]
CONTENT_TYPE_EXTENSIONS = {"audio/mpeg": "mp3", "audio/ogg": "ogg", "audio/pcm": "pcm"}
DEFAULT_ENGINE = "standard"
DEFAULT_VOICE = "Joanna"
DEFAULT_OUTPUT_FORMAT = "mp3"
DEFAULT_TEXT_TYPE = "text"
@ -126,6 +130,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
vol.Inclusive(CONF_SECRET_ACCESS_KEY, ATTR_CREDENTIALS): cv.string,
vol.Exclusive(CONF_PROFILE_NAME, ATTR_CREDENTIALS): cv.string,
vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORTED_VOICES),
vol.Optional(CONF_ENGINE, default=DEFAULT_ENGINE): vol.In(SUPPORTED_ENGINES),
vol.Optional(CONF_OUTPUT_FORMAT, default=DEFAULT_OUTPUT_FORMAT): vol.In(
SUPPORTED_OUTPUT_FORMATS
),
@ -225,6 +230,7 @@ class AmazonPollyProvider(Provider):
return None, None
resp = self.client.synthesize_speech(
Engine=self.config[CONF_ENGINE],
OutputFormat=self.config[CONF_OUTPUT_FORMAT],
SampleRate=self.config[CONF_SAMPLE_RATE],
Text=message,

View file

@ -3,7 +3,7 @@
"abort": {
"access_token": "S'ha produ\u00eft un error desconegut al generat un testimoni d'acc\u00e9s.",
"already_setup": "El compte d\u2019Ambi Climate est\u00e0 configurat.",
"no_config": "Necessites configurar Ambi Climate abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/ambiclimate/)."
"no_config": "Necessites configurar Ambiclimate abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/ambiclimate/)."
},
"create_entry": {
"default": "Autenticaci\u00f3 exitosa amb Ambi Climate."
@ -14,7 +14,7 @@
},
"step": {
"auth": {
"description": "V\u00e9s a l'[enlla\u00e7]({authorization_url}) i <b>Permet</b> l'acc\u00e9s al teu compte de Ambi Climate, despr\u00e9s torna i prem <b>Envia</b> (a sota).\n(Assegura't que l'enlla\u00e7 de retorn \u00e9s el seg\u00fcent {cb_url})",
"description": "V\u00e9s a l'[enlla\u00e7]({authorization_url}) i <b>Permet</b> l'acc\u00e9s al teu compte de Ambiclimate, despr\u00e9s torna i prem <b>Envia</b> (a sota).\n(Assegura't que l'enlla\u00e7 de retorn \u00e9s el seg\u00fcent {cb_url})",
"title": "Autenticaci\u00f3 amb Ambi Climate"
}
},

View file

@ -3,7 +3,7 @@
"abort": {
"access_token": "\uc561\uc138\uc2a4 \ud1a0\ud070 \uc0dd\uc131\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.",
"already_setup": "Ambi Climate \uacc4\uc815\uc774 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
"no_config": "Ambi Climate \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Ambi Climate \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/ambiclimate/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694."
"no_config": "Ambiclimate \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Ambiclimate \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/ambiclimate/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694."
},
"create_entry": {
"default": "Ambi Climate \ub85c \uc131\uacf5\uc801\uc73c\ub85c \uc778\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."

View file

@ -3,7 +3,7 @@
"abort": {
"access_token": "Onbekannte Feeler beim gener\u00e9ieren vum Acc\u00e8s Jeton.",
"already_setup": "Den Ambiclimate Kont ass konfigur\u00e9iert.",
"no_config": "Dir musst Ambiclimate konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/ambiclimatet/)."
"no_config": "Dir musst Ambiclimate konfigur\u00e9ieren, ier Dir d\u00ebs Authentifiz\u00e9ierung k\u00ebnnt benotzen.[Liest w.e.g. d'Instruktioune](https://www.home-assistant.io/components/ambiclimate/)."
},
"create_entry": {
"default": "Erfollegr\u00e4ich mat Ambiclimate authentifiz\u00e9iert."

View file

@ -9,12 +9,12 @@
"default": "Vellykket autentisering med Ambiclimate"
},
"error": {
"follow_link": "Vennligst f\u00f8lg lenken og godkjen f\u00f8r du trykker p\u00e5 Send",
"follow_link": "Vennligst f\u00f8lg lenken og godkjenn f\u00f8r du trykker p\u00e5 Send",
"no_token": "Ikke autentisert med Ambiclimate"
},
"step": {
"auth": {
"description": "Vennligst f\u00f8lg denne [linken]({authorization_url}) og <b>Tillat</b> tilgang til din Ambiclimate konto, og kom s\u00e5 tilbake og trykk <b>Send</b> nedenfor.\n(Kontroller at den angitte URL-adressen for tilbakeringing er {cb_url})",
"description": "Vennligst f\u00f8lg denne [linken]({authorization_url}) og <b>Tillat</b> tilgang til din Ambiclimate konto, kom deretter tilbake og trykk <b>Send</b> nedenfor.\n(Kontroller at den angitte URL-adressen for tilbakeringing er {cb_url})",
"title": "Autensiere Ambiclimate"
}
},

View file

@ -3,7 +3,7 @@
"abort": {
"access_token": "Nieznany b\u0142\u0105d podczas generowania tokena dost\u0119pu.",
"already_setup": "Konto Ambiclimate jest skonfigurowane.",
"no_config": "Musisz skonfigurowa\u0107 Ambiclimate, zanim b\u0119dziesz m\u00f3g\u0142 si\u0119 w nim uwierzytelni\u0107. [Przeczytaj instrukcj\u0119](https://www.home-assistant.io/components/ambiclimate/)."
"no_config": "Musisz skonfigurowa\u0107 Ambiclimate, zanim b\u0119dziesz m\u00f3g\u0142 si\u0119 w nim uwierzytelni\u0107. [Przeczytaj instrukcj\u0119] (https://www.home-assistant.io/components/ambiclimate/)."
},
"create_entry": {
"default": "Pomy\u015blnie uwierzytelniono z Ambiclimate"

View file

@ -3,7 +3,7 @@
"abort": {
"access_token": "\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.",
"already_setup": "\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c Ambi Climate \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430.",
"no_config": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Ambi Climate \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ambiclimate/)."
"no_config": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Ambiclimate \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/ambiclimate/)."
},
"create_entry": {
"default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e."

View file

@ -3,7 +3,7 @@
"abort": {
"access_token": "Neznana napaka pri ustvarjanju \u017eetona za dostop.",
"already_setup": "Ra\u010dun Ambiclimate je konfiguriran.",
"no_config": "Ambiclimat morate konfigurirati, preden lahko z njo preverjate pristnost. [Preberite navodila] (https://www.home-assistant.io/components/ambiclimate/)."
"no_config": "Ambiclimate morate konfigurirati, preden lahko z njo preverjate pristnost. [Preberite navodila] (https://www.home-assistant.io/components/ambiclimate/)."
},
"create_entry": {
"default": "Uspe\u0161no overjeno z funkcijo Ambiclimate"

View file

@ -6,7 +6,7 @@
"no_config": "\u5fc5\u9808\u5148\u8a2d\u5b9a Ambiclimate \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15]\uff08https://www.home-assistant.io/components/ambiclimate/\uff09\u3002"
},
"create_entry": {
"default": "\u5df2\u6210\u529f\u8a8d\u8b49 Ambiclimate \u88dd\u7f6e\u3002"
"default": "\u5df2\u6210\u529f\u8a8d\u8b49 Ambiclimate \u8a2d\u5099\u3002"
},
"error": {
"follow_link": "\u8acb\u65bc\u50b3\u9001\u524d\uff0c\u5148\u4f7f\u7528\u9023\u7d50\u4e26\u9032\u884c\u8a8d\u8b49\u3002",

View file

@ -2,7 +2,7 @@
"domain": "ambiclimate",
"name": "Ambiclimate",
"config_flow": true,
"documentation": "https://www.home-assistant.io/components/ambiclimate",
"documentation": "https://www.home-assistant.io/integrations/ambiclimate",
"requirements": [
"ambiclimate==0.2.1"
],

View file

@ -14,6 +14,6 @@
"title": "Completa tu informaci\u00f3n"
}
},
"title": "Ambient PWS"
"title": "Ambiente PWS"
}
}

View file

@ -1,7 +1,7 @@
{
"config": {
"error": {
"identifier_exists": "\u041a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438/\u0438\u043b\u0438 \u043a\u043b\u044e\u0447 API \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d",
"identifier_exists": "\u041a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438/\u0438\u043b\u0438 \u043a\u043b\u044e\u0447 API \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d.",
"invalid_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API \u0438/\u0438\u043b\u0438 \u043a\u043b\u044e\u0447 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f",
"no_devices": "\u0412 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
},

View file

@ -3,7 +3,7 @@
"error": {
"identifier_exists": "API \u5bc6\u9470\u53ca/\u6216\u61c9\u7528\u5bc6\u9470\u5df2\u8a3b\u518a",
"invalid_key": "API \u5bc6\u9470\u53ca/\u6216\u61c9\u7528\u5bc6\u9470\u7121\u6548",
"no_devices": "\u5e33\u865f\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u88dd\u7f6e"
"no_devices": "\u5e33\u865f\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u8a2d\u5099"
},
"step": {
"user": {

View file

@ -2,7 +2,7 @@
"domain": "ambient_station",
"name": "Ambient station",
"config_flow": true,
"documentation": "https://www.home-assistant.io/components/ambient_station",
"documentation": "https://www.home-assistant.io/integrations/ambient_station",
"requirements": [
"aioambient==0.3.2"
],

View file

@ -1,7 +1,7 @@
{
"domain": "amcrest",
"name": "Amcrest",
"documentation": "https://www.home-assistant.io/components/amcrest",
"documentation": "https://www.home-assistant.io/integrations/amcrest",
"requirements": [
"amcrest==1.5.3"
],

View file

@ -1,7 +1,7 @@
{
"domain": "ampio",
"name": "Ampio",
"documentation": "https://www.home-assistant.io/components/ampio",
"documentation": "https://www.home-assistant.io/integrations/ampio",
"requirements": [
"asmog==0.0.6"
],

View file

@ -1,7 +1,7 @@
{
"domain": "android_ip_webcam",
"name": "Android ip webcam",
"documentation": "https://www.home-assistant.io/components/android_ip_webcam",
"documentation": "https://www.home-assistant.io/integrations/android_ip_webcam",
"requirements": [
"pydroid-ipcam==0.8"
],

View file

@ -1,9 +1,10 @@
{
"domain": "androidtv",
"name": "Androidtv",
"documentation": "https://www.home-assistant.io/components/androidtv",
"documentation": "https://www.home-assistant.io/integrations/androidtv",
"requirements": [
"androidtv==0.0.27"
"adb-shell==0.0.4",
"androidtv==0.0.30"
],
"dependencies": [],
"codeowners": ["@JeffLIrion"]

View file

@ -3,6 +3,12 @@ import functools
import logging
import voluptuous as vol
from adb_shell.exceptions import (
InvalidChecksumError,
InvalidCommandError,
InvalidResponseError,
TcpTimeoutException,
)
from androidtv import setup, ha_state_detection_rules_validator
from androidtv.constants import APPS, KEYS
@ -123,11 +129,15 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
"""Set up the Android TV / Fire TV platform."""
hass.data.setdefault(ANDROIDTV_DOMAIN, {})
host = "{0}:{1}".format(config[CONF_HOST], config[CONF_PORT])
host = f"{config[CONF_HOST]}:{config[CONF_PORT]}"
if CONF_ADB_SERVER_IP not in config:
# Use "python-adb" (Python ADB implementation)
adb_log = "using Python ADB implementation "
# Use "adb_shell" (Python ADB implementation)
adb_log = "using Python ADB implementation " + (
f"with adbkey='{config[CONF_ADBKEY]}'"
if CONF_ADBKEY in config
else "without adbkey authentication"
)
if CONF_ADBKEY in config:
aftv = setup(
host,
@ -135,7 +145,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
device_class=config[CONF_DEVICE_CLASS],
state_detection_rules=config[CONF_STATE_DETECTION_RULES],
)
adb_log += "with adbkey='{0}'".format(config[CONF_ADBKEY])
else:
aftv = setup(
@ -143,7 +152,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
device_class=config[CONF_DEVICE_CLASS],
state_detection_rules=config[CONF_STATE_DETECTION_RULES],
)
adb_log += "without adbkey authentication"
else:
# Use "pure-python-adb" (communicate with ADB server)
aftv = setup(
@ -153,9 +161,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
device_class=config[CONF_DEVICE_CLASS],
state_detection_rules=config[CONF_STATE_DETECTION_RULES],
)
adb_log = "using ADB server at {0}:{1}".format(
config[CONF_ADB_SERVER_IP], config[CONF_ADB_SERVER_PORT]
)
adb_log = f"using ADB server at {config[CONF_ADB_SERVER_IP]}:{config[CONF_ADB_SERVER_PORT]}"
if not aftv.available:
# Determine the name that will be used for the device in the log
@ -251,6 +257,7 @@ def adb_decorator(override_available=False):
"establishing attempt in the next update. Error: %s",
err,
)
self.aftv.adb.close()
self._available = False # pylint: disable=protected-access
return None
@ -278,14 +285,7 @@ class ADBDevice(MediaPlayerDevice):
# ADB exceptions to catch
if not self.aftv.adb_server_ip:
# Using "python-adb" (Python ADB implementation)
from adb.adb_protocol import (
InvalidChecksumError,
InvalidCommandError,
InvalidResponseError,
)
from adb.usb_exceptions import TcpTimeoutException
# Using "adb_shell" (Python ADB implementation)
self.exceptions = (
AttributeError,
BrokenPipeError,

View file

@ -1,7 +1,7 @@
{
"domain": "anel_pwrctrl",
"name": "Anel pwrctrl",
"documentation": "https://www.home-assistant.io/components/anel_pwrctrl",
"documentation": "https://www.home-assistant.io/integrations/anel_pwrctrl",
"requirements": [
"anel_pwrctrl-homeassistant==0.0.1.dev2"
],

View file

@ -1,7 +1,7 @@
{
"domain": "anthemav",
"name": "Anthemav",
"documentation": "https://www.home-assistant.io/components/anthemav",
"documentation": "https://www.home-assistant.io/integrations/anthemav",
"requirements": [
"anthemav==1.1.10"
],

View file

@ -1,7 +1,7 @@
{
"domain": "apache_kafka",
"name": "Apache Kafka",
"documentation": "https://www.home-assistant.io/components/apache_kafka",
"documentation": "https://www.home-assistant.io/integrations/apache_kafka",
"requirements": [
"aiokafka==0.5.1"
],

View file

@ -1,7 +1,7 @@
{
"domain": "apcupsd",
"name": "Apcupsd",
"documentation": "https://www.home-assistant.io/components/apcupsd",
"documentation": "https://www.home-assistant.io/integrations/apcupsd",
"requirements": [
"apcaccess==0.0.13"
],

View file

@ -1,7 +1,7 @@
{
"domain": "api",
"name": "Home Assistant API",
"documentation": "https://www.home-assistant.io/components/api",
"documentation": "https://www.home-assistant.io/integrations/api",
"requirements": [],
"dependencies": [
"http"

View file

@ -1,7 +1,7 @@
{
"domain": "apns",
"name": "Apns",
"documentation": "https://www.home-assistant.io/components/apns",
"documentation": "https://www.home-assistant.io/integrations/apns",
"requirements": [
"apns2==0.3.0"
],

View file

@ -1,7 +1,7 @@
{
"domain": "apple_tv",
"name": "Apple tv",
"documentation": "https://www.home-assistant.io/components/apple_tv",
"documentation": "https://www.home-assistant.io/integrations/apple_tv",
"requirements": [
"pyatv==0.3.13"
],

View file

@ -1,7 +1,7 @@
{
"domain": "aprs",
"name": "APRS",
"documentation": "https://www.home-assistant.io/components/aprs",
"documentation": "https://www.home-assistant.io/integrations/aprs",
"dependencies": [],
"codeowners": ["@PhilRW"],
"requirements": [

View file

@ -1,7 +1,7 @@
{
"domain": "aqualogic",
"name": "Aqualogic",
"documentation": "https://www.home-assistant.io/components/aqualogic",
"documentation": "https://www.home-assistant.io/integrations/aqualogic",
"requirements": [
"aqualogic==1.0"
],

View file

@ -1,7 +1,7 @@
{
"domain": "aquostv",
"name": "Aquostv",
"documentation": "https://www.home-assistant.io/components/aquostv",
"documentation": "https://www.home-assistant.io/integrations/aquostv",
"requirements": [
"sharp_aquos_rc==0.3.2"
],

View file

@ -0,0 +1,5 @@
{
"config": {
"title": "Arcam FMJ"
}
}

View file

@ -0,0 +1,5 @@
{
"config": {
"title": "Arcam FMJ"
}
}

View file

@ -0,0 +1,5 @@
{
"config": {
"title": "Arcam FMJ"
}
}

View file

@ -0,0 +1,5 @@
{
"config": {
"title": "Arcam FMJ"
}
}

View file

@ -2,7 +2,7 @@
"domain": "arcam_fmj",
"name": "Arcam FMJ Receiver control",
"config_flow": false,
"documentation": "https://www.home-assistant.io/components/arcam_fmj",
"documentation": "https://www.home-assistant.io/integrations/arcam_fmj",
"requirements": [
"arcam-fmj==0.4.3"
],

View file

@ -1,7 +1,7 @@
{
"domain": "arduino",
"name": "Arduino",
"documentation": "https://www.home-assistant.io/components/arduino",
"documentation": "https://www.home-assistant.io/integrations/arduino",
"requirements": [
"PyMata==2.14"
],

View file

@ -1,7 +1,7 @@
{
"domain": "arest",
"name": "Arest",
"documentation": "https://www.home-assistant.io/components/arest",
"documentation": "https://www.home-assistant.io/integrations/arest",
"requirements": [],
"dependencies": [],
"codeowners": [

View file

@ -1,7 +1,7 @@
{
"domain": "arlo",
"name": "Arlo",
"documentation": "https://www.home-assistant.io/components/arlo",
"documentation": "https://www.home-assistant.io/integrations/arlo",
"requirements": [
"pyarlo==0.2.3"
],

View file

@ -1,7 +1,7 @@
{
"domain": "aruba",
"name": "Aruba",
"documentation": "https://www.home-assistant.io/components/aruba",
"documentation": "https://www.home-assistant.io/integrations/aruba",
"requirements": [
"pexpect==4.6.0"
],

View file

@ -1,7 +1,7 @@
{
"domain": "arwn",
"name": "Arwn",
"documentation": "https://www.home-assistant.io/components/arwn",
"documentation": "https://www.home-assistant.io/integrations/arwn",
"requirements": [],
"dependencies": [
"mqtt"

View file

@ -1,7 +1,7 @@
{
"domain": "asterisk_cdr",
"name": "Asterisk cdr",
"documentation": "https://www.home-assistant.io/components/asterisk_cdr",
"documentation": "https://www.home-assistant.io/integrations/asterisk_cdr",
"requirements": [],
"dependencies": [
"asterisk_mbox"

View file

@ -1,7 +1,7 @@
{
"domain": "asterisk_mbox",
"name": "Asterisk mbox",
"documentation": "https://www.home-assistant.io/components/asterisk_mbox",
"documentation": "https://www.home-assistant.io/integrations/asterisk_mbox",
"requirements": [
"asterisk_mbox==0.5.0"
],

View file

@ -1,7 +1,7 @@
{
"domain": "asuswrt",
"name": "Asuswrt",
"documentation": "https://www.home-assistant.io/components/asuswrt",
"documentation": "https://www.home-assistant.io/integrations/asuswrt",
"requirements": [
"aioasuswrt==1.1.21"
],

View file

@ -1,7 +1,7 @@
{
"domain": "atome",
"name": "Atome",
"documentation": "https://www.home-assistant.io/components/atome",
"documentation": "https://www.home-assistant.io/integrations/atome",
"dependencies": [],
"codeowners": ["@baqs"],
"requirements": ["pyatome==0.1.1"]

View file

@ -1,7 +1,7 @@
{
"domain": "august",
"name": "August",
"documentation": "https://www.home-assistant.io/components/august",
"documentation": "https://www.home-assistant.io/integrations/august",
"requirements": [
"py-august==0.7.0"
],

View file

@ -1,7 +1,7 @@
{
"domain": "aurora",
"name": "Aurora",
"documentation": "https://www.home-assistant.io/components/aurora",
"documentation": "https://www.home-assistant.io/integrations/aurora",
"requirements": [],
"dependencies": [],
"codeowners": []

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