Compare commits

...

108 Commits

Author SHA1 Message Date
Paulus Schoutsen
a8844ff24a Merge pull request #47645 from home-assistant/rc 2021-03-08 17:40:16 -08:00
Paulus Schoutsen
b80c2d426c Bumped version to 2021.3.3 2021-03-08 23:23:04 +00:00
Raman Gupta
b352c5840f Update zwave_js supported features list to be static (#47623) 2021-03-08 23:22:47 +00:00
Shay Levy
9f6007b4e2 Fix Shelly logbook exception when missing COAP (#47620) 2021-03-08 23:22:47 +00:00
J. Nick Koston
58573dc74d Fix turning off scene in homekit (#47604) 2021-03-08 23:22:46 +00:00
J. Nick Koston
a51ad137a1 Fix insteon fan speeds (#47603) 2021-03-08 23:22:45 +00:00
J. Nick Koston
9601cb7445 Ensure template fan value_template always determines on state (#47598) 2021-03-08 23:22:44 +00:00
J. Nick Koston
96b266b2e8 Fix turn on without speed in homekit controller (#47597) 2021-03-08 23:22:44 +00:00
Bram Kragten
3c1aac1034 Update frontend to 20210302.6 (#47592) 2021-03-08 23:22:43 +00:00
J. Nick Koston
0f115f6937 Ensure bond devices recover when wifi disconnects and reconnects (#47591) 2021-03-08 23:22:42 +00:00
Raman Gupta
f1fc6c4b25 Add fallback zwave_js entity name using node ID (#47582)
* add fallback zwave_js entity name using node ID

* add new fixture and test for name that was failing
2021-03-08 23:22:12 +00:00
Tony Roman
37f486941a Allow running and restarting with both ozw and zwave active (#47566)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2021-03-08 23:21:14 +00:00
Diogo Gomes
69f63129aa Correct weather entities forecast time (#47565) 2021-03-08 23:21:14 +00:00
Martin Hjelmare
56efae3cb5 Fix mysensors unload clean up (#47541) 2021-03-08 23:21:13 +00:00
Martin Hjelmare
a2e00324a8 Fix mysensors device tracker (#47536) 2021-03-08 23:21:12 +00:00
Martin Hjelmare
e63f766c20 Bump pymysensors to 0.21.0 (#47530) 2021-03-08 23:21:11 +00:00
ollo69
e7717694a3 Fix AsusWRT wrong api call (#47522) 2021-03-08 23:21:11 +00:00
Martin Hjelmare
ba2b62305b Fix mysensors notify platform (#47517) 2021-03-08 23:21:10 +00:00
Anders Melchiorsen
b25f846136 Fix Sonos polling mode (#47498) 2021-03-08 23:21:09 +00:00
J. Nick Koston
c1a5a18b53 Bump HAP-python to 3.4.0 (#47476)
* Bump HAP-python to 3.3.3

* bump

* fix mocking
2021-03-08 23:21:09 +00:00
Nathan Spencer
3b05a12e62 Adjust litterrobot tests and code to match guidelines (#47060)
* Use SwitchEntity instead of ToggleEntity and adjust test patches as recommended

* Move async_create_entry out of try block in config_flow

* Patch pypi package instead of HA code

* Bump pylitterbot to 2021.2.6, fix tests, and implement other code review suggestions

* Bump pylitterbot to 2021.2.8, remove sleep mode start/end time from vacuum, adjust and add sensors for sleep mode start/end time

* Move icon helper back to Litter-Robot component and isoformat times on time sensors
2021-03-08 23:21:08 +00:00
Paulus Schoutsen
1145c30c4b Merge pull request #47490 from home-assistant/rc 2021-03-05 16:22:59 -08:00
Paulus Schoutsen
939da2403f Bumped version to 2021.3.2 2021-03-05 23:38:27 +00:00
Phil Bruckner
ef79d24a8c Bump amcrest package version to 1.7.1 (#47483) 2021-03-05 23:37:55 +00:00
Raman Gupta
55c1b67de4 Update zwave_js.refresh_value service description (#47469) 2021-03-05 23:37:54 +00:00
Paulus Schoutsen
90e0801c1b Raise error instead of crashing when template passed to call service target (#47467) 2021-03-05 23:37:54 +00:00
Raman Gupta
65859b4107 Bump zwave-js-server-python to 0.21.1 (#47464) 2021-03-05 23:37:52 +00:00
functionpointer
6c45a7d533 Use conn_made callback in MySensors (#47463) 2021-03-05 23:37:52 +00:00
Bram Kragten
ddc6cd6da1 Update frontend to 20210302.5 (#47462) 2021-03-05 23:37:51 +00:00
Joakim Plate
a4369fc352 Bump version with fix for v1 (#47458) 2021-03-05 23:37:50 +00:00
Franck Nijhof
d11da43551 Fix Hue scene overriding Hue default transition times (#47454) 2021-03-05 23:37:49 +00:00
Tobias Sauerwein
f99ef25f88 Fix issue at Netatmo startup (#47452) 2021-03-05 23:37:49 +00:00
mvn23
9fa0de8600 Update pyotgw to 1.1b1 (#47446) 2021-03-05 23:37:48 +00:00
Paulus Schoutsen
91ac4554a2 Merge pull request #47422 from home-assistant/rc 2021-03-04 17:17:29 -08:00
Martin Hjelmare
d9542c2efe Only create snapshot if add-on update will be done (#47424) 2021-03-05 00:38:53 +00:00
Paulus Schoutsen
915ee2f4ee Bumped version to 2021.3.1 2021-03-05 00:22:31 +00:00
Franck Nijhof
ff86f64806 Fix older Roborock models (#47412) 2021-03-05 00:21:55 +00:00
Raman Gupta
25ff2e745d Bump zwave-js-server-python to 0.21.0 (#47408)
Co-authored-by: Tobias Sauerwein <cgtobi@users.noreply.github.com>
2021-03-05 00:18:18 +00:00
Raman Gupta
f53cff49d5 Don't convert Climacell forecast temperatures to celsius because platform does it automatically (#47406) 2021-03-05 00:18:17 +00:00
Aaron Bach
36a2521799 Fix AirVisual exception when config entry contains old integration type (#47405) 2021-03-05 00:18:16 +00:00
Raman Gupta
ee55a04b4b Fix Climacell timezone issue with daily forecasts (#47402) 2021-03-05 00:18:15 +00:00
Sebastian Muszynski
6724d86565 Fix measurement unit (Closes: #47390) (#47398) 2021-03-05 00:18:14 +00:00
J. Nick Koston
14dca8e783 Map silent as a preset mode for fan backcompat (#47396)
The original change did not map silent as a preset mode
because it was not clear if it was a speed or a preset.
2021-03-05 00:18:14 +00:00
Christophe Painchaud
1817147995 Fix RFLink TCP KeepAlive error log (#47395) 2021-03-05 00:18:13 +00:00
Eric Severance
0bf3dea40c Revert "Speed-up wemo discovery (#46821)" (#47392)
This reverts commit 6e52b26c06.
2021-03-05 00:18:12 +00:00
Bram Kragten
5685b4aa33 Update frontend to 20210302.4 (#47383) 2021-03-05 00:18:11 +00:00
Martin Hjelmare
ef9b9663c5 Fix access of missing zwave_js climate unit value (#47380) 2021-03-05 00:18:11 +00:00
Franck Nijhof
d83ccdc97a Don't raise on known non-matching states in numeric state condition (#47378) 2021-03-05 00:18:10 +00:00
Martin Hjelmare
c0840e22dc Fix zwave_js manual reconfiguration of add-on managed entry (#47364) 2021-03-05 00:18:09 +00:00
Anders Melchiorsen
33c3566106 Catch ConditionError in generic_thermostat climate (#47359) 2021-03-05 00:18:09 +00:00
Martin Hjelmare
d175ac8e0d Make zwave_js add-on manager more flexible (#47356) 2021-03-05 00:18:08 +00:00
starkillerOG
c2f7a38d09 Fix Xiaomi Miio setup of switch entity for lumi.acpartner.v3 (#47345) 2021-03-05 00:18:07 +00:00
Franck Nijhof
e9785fcd3d Merge pull request #47319 from home-assistant/rc 2021-03-03 20:05:36 +01:00
Franck Nijhof
b711686e10 Bumped version to 2021.3.0 2021-03-03 19:17:17 +01:00
Paulus Schoutsen
584ad07567 Simplify switch light (#47317) 2021-03-03 19:16:25 +01:00
Erik Montnemery
a89ba0ed8e Improve behaviour when disabling or enabling config entries (#47301) 2021-03-03 19:16:21 +01:00
Bram Kragten
15c89ebada Update frontend to 20210302.3 (#47310) 2021-03-03 16:01:30 +01:00
Raman Gupta
24919e99b8 Correct climacell device info (#47292) 2021-03-03 16:01:26 +01:00
Paulus Schoutsen
da2c7dc743 Bumped version to 2021.3.0b7 2021-03-02 22:37:27 +00:00
Raman Gupta
f74b88a29c Bump zwave-js-server-python to 0.20.1 (#47289) 2021-03-02 22:36:52 +00:00
Raman Gupta
eb981fb007 Convert climacell forecast timestamp to isoformat so that UI shows the right times (#47286) 2021-03-02 22:36:51 +00:00
Alexei Chetroi
39b9ad0ca0 Update ZHA dependencies (#47282) 2021-03-02 22:36:50 +00:00
Bram Kragten
ebb9008c27 Update frontend to 20210302.0 (#47278) 2021-03-02 22:36:49 +00:00
Tobias Sauerwein
4b9c148989 Fix issue when setting boost preset for a turned off Netatmo thermostat (#47275) 2021-03-02 22:36:49 +00:00
Aaron Bach
b8bc0a7fe9 Bump simplisafe-python to 9.6.9 (#47273) 2021-03-02 22:36:48 +00:00
Erik Montnemery
7a6edf9725 Make MQTT number respect retain setting (#47270) 2021-03-02 22:36:47 +00:00
Raman Gupta
6c5c3233f1 Add raw values to zwave_js value notification event (#47258)
* add value_raw to value notification event that always shows the untranslated state value

* add property key and property to event params
2021-03-02 22:36:46 +00:00
Paulus Schoutsen
d7f4416421 Fix Alexa doorbells (#47257) 2021-03-02 22:36:45 +00:00
Martin Hjelmare
23049955f8 Add zwave_js add-on manager (#47251)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-03-02 22:36:45 +00:00
Franck Nijhof
d88ee3bf4a Upgrade pillow to 8.1.1 (#47223) 2021-03-02 22:36:44 +00:00
Simone Chemelli
dddf28b138 Limit log spam by ConfigEntryNotReady (#47201) 2021-03-02 22:36:42 +00:00
HomeAssistant Azure
13516aa90c [ci skip] Translation update 2021-03-02 22:35:04 +00:00
HomeAssistant Azure
d81155327a [ci skip] Translation update 2021-03-02 22:35:04 +00:00
HomeAssistant Azure
3b459cd59a [ci skip] Translation update 2021-03-02 22:35:03 +00:00
HomeAssistant Azure
be4de15a10 [ci skip] Translation update 2021-03-02 22:35:03 +00:00
HomeAssistant Azure
ab5173c4cf [ci skip] Translation update 2021-03-02 22:35:03 +00:00
Paulus Schoutsen
ec95474604 Bumped version to 2021.3.0b6 2021-03-02 01:17:40 +00:00
Paulus Schoutsen
3117e47e1b Revert "Fix the updater schema (#47128)" (#47254)
This reverts commit 98be703d90.
2021-03-02 01:17:26 +00:00
Bram Kragten
bd29d82728 Update frontend to 20210301.0 (#47252) 2021-03-02 01:17:26 +00:00
Raman Gupta
88d29bcf20 Add suggested area for zwave_js devices (#47250) 2021-03-02 01:17:25 +00:00
J. Nick Koston
3ebe31e172 Fix lutron caseta fan handling of speed off (#47244) 2021-03-02 01:17:24 +00:00
Aaron Bach
8cf0fcc7f3 Bump simplisafe-python to 9.6.8 (#47241) 2021-03-02 01:17:24 +00:00
Erik Montnemery
118c996a9f Pass variables to initial evaluation of template trigger (#47236)
* Pass variables to initial evaluation of template trigger

* Add test

* Clarify test
2021-03-02 01:17:23 +00:00
Shay Levy
c411f0dcdc Fix Shelly Polling (#47224) 2021-03-02 01:17:22 +00:00
starkillerOG
30ccd33e7f Fix Xiaomi Miio flow unique_id for non discovery flows (#47222) 2021-03-02 01:17:22 +00:00
Franck Nijhof
acdad8a28c Fix duplicate template handling in Persistent Notifications (#47217) 2021-03-02 01:17:21 +00:00
J. Nick Koston
c28903103d Fix harmony failing to switch activities when a switch is in progress (#47212)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-03-02 01:17:20 +00:00
Erik Montnemery
b2a3c35e3a Fix race when disabling config entries (#47210)
* Fix race when disabling config entries

* Remove unused constant
2021-03-02 01:17:19 +00:00
Max Chodorowski
ea65f612cc Fix number of reported issues by github integration (#47203) 2021-03-02 01:17:19 +00:00
Marcel van der Veldt
819738a15c Update color logic for zwave_js light platform (#47110)
Co-authored-by: Raman Gupta <7243222+raman325@users.noreply.github.com>
2021-03-02 01:17:18 +00:00
Pascal Vizeli
f192b3c1e5 Bumped version to 2021.3.0b5 2021-03-01 08:32:13 +00:00
Stefan Agner
b9edd0d7ad Fix generic-x86-64 build (#47214)
Replace the wrong Docker Hub repository slipped in during testing.
2021-03-01 08:30:22 +00:00
J. Nick Koston
4907c12964 Bump HAP-python to 3.3.2 to fix unavailable condition on restart (#47213)
Fixes

https://github.com/ikalchev/HAP-python/compare/v3.3.1...v3.3.2
2021-03-01 08:30:21 +00:00
J. Nick Koston
62e224ecb0 Increment the homekit config version when restarting (#47209)
If an entity changes between restart the iOS/controller
device may have cached the old chars for the accessory.
To force the iOS/controller to reload the chars, we
increment the config version when Home Assistant restarts
2021-03-01 08:30:21 +00:00
Aaron Bach
0e951f288b Bump simplisafe-python to 9.6.7 (#47206) 2021-03-01 08:30:20 +00:00
starkillerOG
aa9b445856 Fix Xiaomi Miio discovery (#47134) 2021-03-01 08:30:20 +00:00
AJ Schmidt
8513250628 Update AlarmDecoder dependency (#46841) 2021-03-01 08:30:19 +00:00
Paulus Schoutsen
6887474ddc Bumped version to 2021.3.0b4 2021-02-28 20:22:46 +00:00
J. Nick Koston
e93868f85b Update HAP-python to 3.3.1 (#47180)
Fixes disconnect when setting a single char fails
https://github.com/ikalchev/HAP-python/compare/v3.3.0...v3.3.1
2021-02-28 20:22:29 +00:00
David F. Mulcahey
db098d90dd Bump ZHA quirks to 0.0.54 (#47172) 2021-02-28 20:22:29 +00:00
Stefan Agner
552da0327e Bump builder to get generic-x86-64 nightly builds (#47164) 2021-02-28 20:22:28 +00:00
Erik Montnemery
104d5c510f Fix MQTT trigger where wanted payload may be parsed as an integer (#47162) 2021-02-28 20:22:27 +00:00
Paulus Schoutsen
d9d979d50e Fix the updater schema (#47128) 2021-02-28 20:21:41 +00:00
Bram Kragten
e65b2231ba Update frontend to 20210226.0 (#47123) 2021-02-28 20:21:41 +00:00
J. Nick Koston
2b0f6716b3 Provide a human readable exception for the percentage util (#47121) 2021-02-28 20:21:40 +00:00
J. Nick Koston
dd4f8bf4b4 Handle lutron_caseta fan speed being none (#47120) 2021-02-28 20:21:39 +00:00
Shay Levy
505ca07c4e Fix Shelly RGBW (#47116) 2021-02-28 20:21:39 +00:00
Paulus Schoutsen
807bf15ff3 Use async_capture_events to avoid running in executor (#47111) 2021-02-28 20:21:38 +00:00
397 changed files with 6212 additions and 1516 deletions

View File

@@ -46,7 +46,7 @@ homeassistant/components/arcam_fmj/* @elupus
homeassistant/components/arduino/* @fabaff
homeassistant/components/arest/* @fabaff
homeassistant/components/arris_tg2492lg/* @vanbalken
homeassistant/components/asuswrt/* @kennedyshead
homeassistant/components/asuswrt/* @kennedyshead @ollo69
homeassistant/components/atag/* @MatsNL
homeassistant/components/aten_pe/* @mtdcr
homeassistant/components/atome/* @baqs

View File

@@ -14,7 +14,7 @@ schedules:
always: true
variables:
- name: versionBuilder
value: '2020.11.0'
value: '2021.02.0'
- group: docker
- group: github
- group: twine

View File

@@ -1,6 +1,10 @@
{
"config": {
"abort": {
"single_instance_allowed": "Al geconfigureerd. Slechts een enkele configuratie mogelijk."
},
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_api_key": "API-sleutel",
"requests_exceeded": "Het toegestane aantal verzoeken aan de Accuweather API is overschreden. U moet wachten of de API-sleutel wijzigen."
},

View File

@@ -0,0 +1,19 @@
{
"config": {
"abort": {
"already_configured": "Standort ist bereits konfiguriert"
},
"error": {
"invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel"
},
"step": {
"user": {
"data": {
"api_key": "API-Schl\u00fcssel",
"latitude": "Breitengrad",
"longitude": "L\u00e4ngengrad"
}
}
}
}
}

View File

@@ -393,7 +393,7 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator):
),
ATTR_FORECAST_TEMP: self._get_temperature_day(day),
ATTR_FORECAST_TEMP_LOW: self._get_temperature_low_day(day),
ATTR_FORECAST_TIME: dt_util.as_utc(date),
ATTR_FORECAST_TIME: dt_util.as_utc(date).isoformat(),
ATTR_FORECAST_WIND_SPEED: self._get_wind_speed_day(day),
ATTR_FORECAST_WIND_BEARING: self._get_wind_bearing_day(day),
}
@@ -412,7 +412,7 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator):
day, hour
),
ATTR_FORECAST_TEMP: self._get_temperature(day, hour),
ATTR_FORECAST_TIME: dt_util.as_utc(forecast_dt),
ATTR_FORECAST_TIME: dt_util.as_utc(forecast_dt).isoformat(),
ATTR_FORECAST_WIND_SPEED: self._get_wind_speed(day, hour),
ATTR_FORECAST_WIND_BEARING: self._get_wind_bearing(day, hour),
}

View File

@@ -22,7 +22,9 @@
},
"system_health": {
"info": {
"can_reach_server": "Servidor d'Airly accessible"
"can_reach_server": "Servidor d'Airly accessible",
"requests_per_day": "Sol\u00b7licituds per dia permeses",
"requests_remaining": "Sol\u00b7licituds permeses restants"
}
}
}

View File

@@ -22,7 +22,9 @@
},
"system_health": {
"info": {
"can_reach_server": "Reach Airly server"
"can_reach_server": "Reach Airly server",
"requests_per_day": "Allowed requests per day",
"requests_remaining": "Remaining allowed requests"
}
}
}

View File

@@ -22,7 +22,9 @@
},
"system_health": {
"info": {
"can_reach_server": "\u00dchendus Airly serveriga"
"can_reach_server": "\u00dchendus Airly serveriga",
"requests_per_day": "Lubatud taotlusi p\u00e4evas",
"requests_remaining": "J\u00e4\u00e4nud lubatud taotlusi"
}
}
}

View File

@@ -22,7 +22,9 @@
},
"system_health": {
"info": {
"can_reach_server": "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 Airly"
"can_reach_server": "\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 Airly",
"requests_per_day": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c",
"requests_remaining": "\u0421\u0447\u0451\u0442\u0447\u0438\u043a \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432"
}
}
}

View File

@@ -22,7 +22,9 @@
},
"system_health": {
"info": {
"can_reach_server": "\u9023\u7dda Airly \u4f3a\u670d\u5668"
"can_reach_server": "\u9023\u7dda Airly \u4f3a\u670d\u5668",
"requests_per_day": "\u6bcf\u65e5\u5141\u8a31\u7684\u8acb\u6c42",
"requests_remaining": "\u5176\u9918\u5141\u8a31\u7684\u8acb\u6c42"
}
}
}

View File

@@ -39,6 +39,7 @@ from .const import (
DATA_COORDINATOR,
DOMAIN,
INTEGRATION_TYPE_GEOGRAPHY_COORDS,
INTEGRATION_TYPE_GEOGRAPHY_NAME,
INTEGRATION_TYPE_NODE_PRO,
LOGGER,
)
@@ -142,12 +143,21 @@ def _standardize_geography_config_entry(hass, config_entry):
if not config_entry.options:
# If the config entry doesn't already have any options set, set defaults:
entry_updates["options"] = {CONF_SHOW_ON_MAP: True}
if CONF_INTEGRATION_TYPE not in config_entry.data:
# If the config entry data doesn't contain the integration type, add it:
entry_updates["data"] = {
**config_entry.data,
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY_COORDS,
}
if config_entry.data.get(CONF_INTEGRATION_TYPE) not in [
INTEGRATION_TYPE_GEOGRAPHY_COORDS,
INTEGRATION_TYPE_GEOGRAPHY_NAME,
]:
# If the config entry data doesn't contain an integration type that we know
# about, infer it from the data we have:
entry_updates["data"] = {**config_entry.data}
if CONF_CITY in config_entry.data:
entry_updates["data"][
CONF_INTEGRATION_TYPE
] = INTEGRATION_TYPE_GEOGRAPHY_NAME
else:
entry_updates["data"][
CONF_INTEGRATION_TYPE
] = INTEGRATION_TYPE_GEOGRAPHY_COORDS
if not entry_updates:
return

View File

@@ -7,7 +7,8 @@
"error": {
"cannot_connect": "Feeler beim verbannen",
"general_error": "Onerwaarte Feeler",
"invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel"
"invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel",
"location_not_found": "Standuert net fonnt."
},
"step": {
"geography": {
@@ -19,6 +20,12 @@
"description": "Benotz Airvisual cloud API fir eng geografescher Lag z'iwwerwaachen.",
"title": "Geografie ariichten"
},
"geography_by_name": {
"data": {
"city": "Stad",
"country": "Land"
}
},
"node_pro": {
"data": {
"ip_address": "Host",

View File

@@ -2,7 +2,7 @@
"domain": "alarmdecoder",
"name": "AlarmDecoder",
"documentation": "https://www.home-assistant.io/integrations/alarmdecoder",
"requirements": ["adext==0.3"],
"requirements": ["adext==0.4.1"],
"codeowners": ["@ajschmidt8"],
"config_flow": true
}

View File

@@ -1,7 +1,7 @@
{
"config": {
"abort": {
"already_configured": "AlarmDecoder-apparaat is al geconfigureerd."
"already_configured": "Apparaat is al geconfigureerd"
},
"create_entry": {
"default": "Succesvol verbonden met AlarmDecoder."

View File

@@ -73,10 +73,7 @@ async def async_enable_proactive_mode(hass, smart_home_config):
if not should_report and interface.properties_proactively_reported():
should_report = True
if (
interface.name() == "Alexa.DoorbellEventSource"
and new_state.state == STATE_ON
):
if interface.name() == "Alexa.DoorbellEventSource":
should_doorbell = True
break
@@ -84,27 +81,22 @@ async def async_enable_proactive_mode(hass, smart_home_config):
return
if should_doorbell:
should_report = False
if new_state.state == STATE_ON:
await async_send_doorbell_event_message(
hass, smart_home_config, alexa_changed_entity
)
return
if should_report:
alexa_properties = list(alexa_changed_entity.serialize_properties())
else:
alexa_properties = None
alexa_properties = list(alexa_changed_entity.serialize_properties())
if not checker.async_is_significant_change(
new_state, extra_arg=alexa_properties
):
return
if should_report:
await async_send_changereport_message(
hass, smart_home_config, alexa_changed_entity, alexa_properties
)
elif should_doorbell:
await async_send_doorbell_event_message(
hass, smart_home_config, alexa_changed_entity
)
await async_send_changereport_message(
hass, smart_home_config, alexa_changed_entity, alexa_properties
)
return hass.helpers.event.async_track_state_change(
MATCH_ALL, async_entity_state_listener
@@ -246,7 +238,7 @@ async def async_send_delete_message(hass, config, entity_ids):
async def async_send_doorbell_event_message(hass, config, alexa_entity):
"""Send a DoorbellPress event message for an Alexa entity.
https://developer.amazon.com/docs/smarthome/send-events-to-the-alexa-event-gateway.html
https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-doorbelleventsource.html
"""
token = await config.async_get_access_token()

View File

@@ -2,7 +2,7 @@
"domain": "amcrest",
"name": "Amcrest",
"documentation": "https://www.home-assistant.io/integrations/amcrest",
"requirements": ["amcrest==1.7.0"],
"requirements": ["amcrest==1.7.1"],
"dependencies": ["ffmpeg"],
"codeowners": ["@pnbruckner"]
}

View File

@@ -2,6 +2,7 @@
"config": {
"abort": {
"already_configured": "Apparaat is al geconfigureerd",
"already_in_progress": "De configuratiestroom is al aan de gang",
"cannot_connect": "Kan geen verbinding maken"
},
"error": {

View File

@@ -128,7 +128,7 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
conf_protocol = user_input[CONF_PROTOCOL]
if conf_protocol == PROTOCOL_TELNET:
await api.connection.disconnect()
api.connection.disconnect()
return RESULT_SUCCESS
async def async_step_user(self, user_input=None):

View File

@@ -4,5 +4,5 @@
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/asuswrt",
"requirements": ["aioasuswrt==1.3.1"],
"codeowners": ["@kennedyshead"]
"codeowners": ["@kennedyshead", "@ollo69"]
}

View File

@@ -205,7 +205,7 @@ class AsusWrtRouter:
"""Close the connection."""
if self._api is not None:
if self._protocol == PROTOCOL_TELNET:
await self._api.connection.disconnect()
self._api.connection.disconnect()
self._api = None
for func in self._on_close:

View File

@@ -0,0 +1,24 @@
{
"config": {
"abort": {
"single_instance_allowed": "Bereits konfiguriert. Nur eine einzige Konfiguration m\u00f6glich."
},
"error": {
"cannot_connect": "Verbindung fehlgeschlagen",
"invalid_host": "Ung\u00fcltiger Hostname oder IP-Adresse",
"unknown": "Unerwarteter Fehler"
},
"step": {
"user": {
"data": {
"host": "Host",
"mode": "Modus",
"name": "Name",
"password": "Passwort",
"port": "Port",
"username": "Benutzername"
}
}
}
}
}

View File

@@ -6,6 +6,7 @@
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_host": "Ongeldige hostnaam of IP-adres",
"ssh_not_file": "SSH-sleutelbestand niet gevonden",
"unknown": "Onverwachte fout"
},
"step": {

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"already_configured": "Account al geconfigureerd"
"already_configured": "Account al geconfigureerd",
"reauth_successful": "Herauthenticatie was succesvol"
},
"error": {
"cannot_connect": "Verbinding mislukt, probeer het opnieuw",

View File

@@ -6,23 +6,23 @@
"reauth_successful": "\u91cd\u65b0\u8a8d\u8b49\u6210\u529f"
},
"error": {
"invalid_access_token": "\u5b58\u53d6\u5bc6\u9470\u7121\u6548",
"invalid_access_token": "\u5b58\u53d6\u6b0a\u6756\u7121\u6548",
"unknown": "\u672a\u9810\u671f\u932f\u8aa4"
},
"step": {
"reauth": {
"data": {
"access_token": "\u5b58\u53d6\u5bc6\u9470",
"access_token": "\u5b58\u53d6\u6b0a\u6756",
"email": "\u96fb\u5b50\u90f5\u4ef6"
},
"description": "\u8acb\u91cd\u65b0\u8f38\u5165 Awair \u958b\u767c\u8005\u5b58\u53d6\u5bc6\u9470\u3002"
"description": "\u8acb\u91cd\u65b0\u8f38\u5165 Awair \u958b\u767c\u8005\u5b58\u53d6\u6b0a\u6756\u3002"
},
"user": {
"data": {
"access_token": "\u5b58\u53d6\u5bc6\u9470",
"access_token": "\u5b58\u53d6\u6b0a\u6756",
"email": "\u96fb\u5b50\u90f5\u4ef6"
},
"description": "\u5fc5\u9808\u5148\u8a3b\u518a Awair \u958b\u767c\u8005\u5b58\u53d6\u5bc6\u9470\uff1ahttps://developer.getawair.com/onboard/login"
"description": "\u5fc5\u9808\u5148\u8a3b\u518a Awair \u958b\u767c\u8005\u5b58\u53d6\u6b0a\u6756\uff1ahttps://developer.getawair.com/onboard/login"
}
}
}

View File

@@ -1,11 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Account is al geconfigureerd"
"already_configured": "Account is al geconfigureerd",
"reauth_successful": "Herauthenticatie was succesvol"
},
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_auth": "Ongeldige authenticatie"
"invalid_auth": "Ongeldige authenticatie",
"project_error": "Kon geen projectinformatie ophalen."
},
"step": {
"user": {
"data": {
"organization": "Organisatie",
"project": "Project"
}
}
}
}
}

View File

@@ -4,6 +4,7 @@
"already_configured": "Apparaat is al geconfigureerd"
},
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_access_token": "Ongeldig toegangstoken",
"invalid_auth": "Ongeldige authenticatie",
"unknown": "Onverwachte fout"

View File

@@ -5,7 +5,7 @@
},
"error": {
"cannot_connect": "\u9023\u7dda\u5931\u6557",
"invalid_access_token": "\u5b58\u53d6\u5bc6\u9470\u7121\u6548",
"invalid_access_token": "\u5b58\u53d6\u6b0a\u6756\u7121\u6548",
"invalid_auth": "\u9a57\u8b49\u78bc\u7121\u6548",
"unknown": "\u672a\u9810\u671f\u932f\u8aa4"
},

View File

@@ -102,7 +102,7 @@ class BondEntity(Entity):
async def _async_update_if_bpup_not_alive(self, *_):
"""Fetch via the API if BPUP is not alive."""
if self._bpup_subs.alive and self._initialized:
if self._bpup_subs.alive and self._initialized and self._available:
return
if self._update_lock.locked():

View File

@@ -9,13 +9,13 @@
"old_firmware": "Hi ha un programari antic i no compatible al dispositiu Bond - actualitza'l abans de continuar",
"unknown": "Error inesperat"
},
"flow_title": "Bond: {bond_id} ({host})",
"flow_title": "Bond: {name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "Token d'acc\u00e9s"
},
"description": "Vols configurar {bond_id}?"
"description": "Vols configurar {name}?"
},
"user": {
"data": {

View File

@@ -15,7 +15,7 @@
"data": {
"access_token": "P\u0159\u00edstupov\u00fd token"
},
"description": "Chcete nastavit {bond_id} ?"
"description": "Chcete nastavit {name}?"
},
"user": {
"data": {

View File

@@ -9,13 +9,13 @@
"old_firmware": "Bondi seadme ei toeta vana p\u00fcsivara - uuenda enne j\u00e4tkamist",
"unknown": "Tundmatu viga"
},
"flow_title": "Bond: {bond_id} ( {host} )",
"flow_title": "Bond: {name} ( {host} )",
"step": {
"confirm": {
"data": {
"access_token": "Juurdep\u00e4\u00e4sut\u00f5end"
},
"description": "Kas soovid seadistada teenuse {bond_id} ?"
"description": "Kas soovid seadistada teenust {name} ?"
},
"user": {
"data": {

View File

@@ -9,13 +9,13 @@
"old_firmware": "Ancien micrologiciel non pris en charge sur l'appareil Bond - veuillez mettre \u00e0 niveau avant de continuer",
"unknown": "Erreur inattendue"
},
"flow_title": "Bond : {bond_id} ({h\u00f4te})",
"flow_title": "Lien : {name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "Jeton d'acc\u00e8s"
},
"description": "Voulez-vous configurer {bond_id} ?"
"description": "Voulez-vous configurer {name}?"
},
"user": {
"data": {

View File

@@ -9,13 +9,13 @@
"old_firmware": "Firmware precedente non supportato sul dispositivo Bond - si prega di aggiornare prima di continuare",
"unknown": "Errore imprevisto"
},
"flow_title": "Bond: {bond_id} ({host})",
"flow_title": "Bond: {name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "Token di accesso"
},
"description": "Vuoi configurare {bond_id}?"
"description": "Vuoi configurare {name}?"
},
"user": {
"data": {

View File

@@ -10,8 +10,14 @@
},
"flow_title": "Bond: {bond_id} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "Toegangstoken"
}
},
"user": {
"data": {
"access_token": "Toegangstoken",
"host": "Host"
}
}

View File

@@ -9,13 +9,13 @@
"old_firmware": "Gammel fastvare som ikke st\u00f8ttes p\u00e5 Bond-enheten \u2013 vennligst oppgrader f\u00f8r du fortsetter",
"unknown": "Uventet feil"
},
"flow_title": "",
"flow_title": "Obligasjon: {name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "Tilgangstoken"
},
"description": "Vil du konfigurere {bond_id}?"
"description": "Vil du konfigurere {name}?"
},
"user": {
"data": {

View File

@@ -9,13 +9,13 @@
"old_firmware": "Stare, nieobs\u0142ugiwane oprogramowanie na urz\u0105dzeniu Bond - zaktualizuj przed kontynuowaniem",
"unknown": "Nieoczekiwany b\u0142\u0105d"
},
"flow_title": "Bond: {bond_id} ({host})",
"flow_title": "Bond: {name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "Token dost\u0119pu"
},
"description": "Czy chcesz skonfigurowa\u0107 {bond_id}?"
"description": "Czy chcesz skonfigurowa\u0107 {name}?"
},
"user": {
"data": {

View File

@@ -9,13 +9,13 @@
"old_firmware": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 \u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439.",
"unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430."
},
"flow_title": "Bond {bond_id} ({host})",
"flow_title": "Bond: {name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "\u0422\u043e\u043a\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0430"
},
"description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {bond_id}?"
"description": "\u0425\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c {name}?"
},
"user": {
"data": {

View File

@@ -9,17 +9,17 @@
"old_firmware": "Bond \u88dd\u7f6e\u4f7f\u7528\u4e0d\u652f\u63f4\u7684\u820a\u7248\u672c\u97cc\u9ad4 - \u8acb\u66f4\u65b0\u5f8c\u518d\u7e7c\u7e8c",
"unknown": "\u672a\u9810\u671f\u932f\u8aa4"
},
"flow_title": "Bond\uff1a{bond_id} ({host})",
"flow_title": "Bond\uff1a{name} ({host})",
"step": {
"confirm": {
"data": {
"access_token": "\u5b58\u53d6\u5bc6\u9470"
"access_token": "\u5b58\u53d6\u6b0a\u6756"
},
"description": "\u662f\u5426\u8981\u8a2d\u5b9a {bond_id}\uff1f"
"description": "\u662f\u5426\u8981\u8a2d\u5b9a {name}\uff1f"
},
"user": {
"data": {
"access_token": "\u5b58\u53d6\u5bc6\u9470",
"access_token": "\u5b58\u53d6\u6b0a\u6756",
"host": "\u4e3b\u6a5f\u7aef"
}
}

View File

@@ -2,6 +2,7 @@
"config": {
"abort": {
"already_configured": "Apparaat is al geconfigureerd",
"already_in_progress": "De configuratiestroom is al aan de gang",
"cannot_connect": "Kon niet verbinden",
"invalid_host": "Ongeldige hostnaam of IP-adres",
"not_supported": "Apparaat wordt niet ondersteund",
@@ -17,6 +18,15 @@
"finish": {
"data": {
"name": "Naam"
},
"title": "Kies een naam voor het apparaat"
},
"reset": {
"title": "Ontgrendel het apparaat"
},
"unlock": {
"data": {
"unlock": "Ja, doe het."
}
},
"user": {

View File

@@ -256,7 +256,8 @@ class ClimaCellEntity(CoordinatorEntity):
"""Return device registry information."""
return {
"identifiers": {(DOMAIN, self._config_entry.data[CONF_API_KEY])},
"name": self.name,
"name": "ClimaCell",
"manufacturer": "ClimaCell",
"sw_version": "v3",
"entry_type": "service",
}

View File

@@ -0,0 +1,10 @@
{
"options": {
"step": {
"init": {
"title": "Update ClimaCell opties"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "Ha fallat la connexi\u00f3",
"invalid_api_key": "Clau API inv\u00e0lida",
"rate_limited": "Freq\u00fc\u00e8ncia limitada temporalment, torna-ho a provar m\u00e9s tard.",
"unknown": "Error inesperat"
},
"step": {
"user": {
"data": {
"api_key": "Clau API",
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Nom"
},
"description": "Si no es proporcionen la Latitud i Longitud, s'utilitzaran els valors per defecte de la configuraci\u00f3 de Home Assistant. Es crear\u00e0 una entitat per a cada tipus de previsi\u00f3, per\u00f2 nom\u00e9s s'habilitaran les que seleccionis."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Tipus de previsi\u00f3",
"timestep": "Minuts entre previsions NowCast"
},
"description": "Si decideixes activar l'entitat de predicci\u00f3 \"nowcast\", podr\u00e0s configurar l'interval en minuts entre cada previsi\u00f3. El nombre de previsions proporcionades dep\u00e8n d'aquest interval de minuts.",
"title": "Actualitzaci\u00f3 de les opcions de ClimaCell"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,20 @@
{
"config": {
"error": {
"cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
"invalid_api_key": "Neplatn\u00fd kl\u00ed\u010d API",
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
},
"step": {
"user": {
"data": {
"api_key": "Kl\u00ed\u010d API",
"latitude": "Zem\u011bpisn\u00e1 \u0161\u00ed\u0159ka",
"longitude": "Zem\u011bpisn\u00e1 d\u00e9lka",
"name": "Jm\u00e9no"
}
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,19 @@
{
"config": {
"error": {
"cannot_connect": "Verbindung fehlgeschlagen",
"invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel",
"unknown": "Unerwarteter Fehler"
},
"step": {
"user": {
"data": {
"api_key": "API-Schl\u00fcssel",
"latitude": "Breitengrad",
"longitude": "L\u00e4ngengrad",
"name": "Name"
}
}
}
}
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "Failed to connect",
"invalid_api_key": "Invalid API key",
"rate_limited": "Currently rate limited, please try again later.",
"unknown": "Unexpected error"
},
"step": {
"user": {
"data": {
"api_key": "API Key",
"latitude": "Latitude",
"longitude": "Longitude",
"name": "Name"
},
"description": "If Latitude and Longitude are not provided, the default values in the Home Assistant configuration will be used. An entity will be created for each forecast type but only the ones you select will be enabled by default."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Forecast Type(s)",
"timestep": "Min. Between NowCast Forecasts"
},
"description": "If you choose to enable the `nowcast` forecast entity, you can configure the number of minutes between each forecast. The number of forecasts provided depends on the number of minutes chosen between forecasts.",
"title": "Update ClimaCell Options"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,30 @@
{
"config": {
"error": {
"rate_limited": "Actualmente la tarifa est\u00e1 limitada, por favor int\u00e9ntelo m\u00e1s tarde."
},
"step": {
"user": {
"data": {
"latitude": "Latitud",
"longitude": "Longitud",
"name": "Nombre"
},
"description": "Si no se proporcionan Latitud y Longitud , se utilizar\u00e1n los valores predeterminados en la configuraci\u00f3n de Home Assistant. Se crear\u00e1 una entidad para cada tipo de pron\u00f3stico, pero solo las que seleccione estar\u00e1n habilitadas de forma predeterminada."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Tipo(s) de pron\u00f3stico",
"timestep": "Min. Entre pron\u00f3sticos de NowCast"
},
"description": "Si elige habilitar la entidad de pron\u00f3stico \"nowcast\", puede configurar el n\u00famero de minutos entre cada pron\u00f3stico. El n\u00famero de pron\u00f3sticos proporcionados depende del n\u00famero de minutos elegidos entre los pron\u00f3sticos.",
"title": "Actualizar las opciones ClimaCell"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "\u00dchendamine nurjus",
"invalid_api_key": "Vale API v\u00f5ti",
"rate_limited": "Hetkel on p\u00e4ringud piiratud, proovi hiljem uuesti.",
"unknown": "Tundmatu t\u00f5rge"
},
"step": {
"user": {
"data": {
"api_key": "API v\u00f5ti",
"latitude": "Laiuskraad",
"longitude": "Pikkuskraad",
"name": "Nimi"
},
"description": "Kui [%key:component::climacell::config::step::user::d ata::latitude%] ja [%key:component::climacell::config::step::user::d ata::longitude%] andmed pole sisestatud kasutatakse Home Assistanti vaikev\u00e4\u00e4rtusi. Olem luuakse iga prognoosit\u00fc\u00fcbi jaoks kuid vaikimisi lubatakse ainult need, mille valid."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Prognoosi t\u00fc\u00fcp (t\u00fc\u00fcbid)",
"timestep": "Minuteid NowCasti prognooside vahel"
},
"description": "Kui otsustad lubada \"nowcast\" prognoosi\u00fcksuse, saad seadistada minutite arvu iga prognoosi vahel. Esitatavate prognooside arv s\u00f5ltub prognooside vahel valitud minutite arvust.",
"title": "V\u00e4rskenda ClimaCell suvandeid"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "\u00c9chec de connexion",
"invalid_api_key": "Cl\u00e9 API invalide",
"rate_limited": "Currently rate limited, please try again later.",
"unknown": "Erreur inattendue"
},
"step": {
"user": {
"data": {
"api_key": "Cl\u00e9 d'API",
"latitude": "Latitude",
"longitude": "Longitude",
"name": "Nom"
},
"description": "Si Latitude et Longitude ne sont pas fournis, les valeurs par d\u00e9faut de la configuration de Home Assistant seront utilis\u00e9es. Une entit\u00e9 sera cr\u00e9\u00e9e pour chaque type de pr\u00e9vision, mais seules celles que vous s\u00e9lectionnez seront activ\u00e9es par d\u00e9faut."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Type(s) de pr\u00e9vision",
"timestep": "Min. Entre les pr\u00e9visions NowCast"
},
"description": "Si vous choisissez d'activer l'entit\u00e9 de pr\u00e9vision \u00abnowcast\u00bb, vous pouvez configurer le nombre de minutes entre chaque pr\u00e9vision. Le nombre de pr\u00e9visions fournies d\u00e9pend du nombre de minutes choisies entre les pr\u00e9visions.",
"title": "Mettre \u00e0 jour les options de ClimaCell"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,17 @@
{
"config": {
"error": {
"unknown": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05dc\u05ea\u05d9 \u05e6\u05e4\u05d5\u05d9\u05d4"
},
"step": {
"user": {
"data": {
"api_key": "\u05de\u05e4\u05ea\u05d7 API",
"latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1",
"longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da",
"name": "\u05e9\u05dd"
}
}
}
}
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "Impossibile connettersi",
"invalid_api_key": "Chiave API non valida",
"rate_limited": "Al momento la tariffa \u00e8 limitata, riprova pi\u00f9 tardi.",
"unknown": "Errore imprevisto"
},
"step": {
"user": {
"data": {
"api_key": "Chiave API",
"latitude": "Latitudine",
"longitude": "Logitudine",
"name": "Nome"
},
"description": "Se Latitudine e Logitudine non vengono forniti, verranno utilizzati i valori predefiniti nella configurazione di Home Assistant. Verr\u00e0 creata un'entit\u00e0 per ogni tipo di previsione, ma solo quelli selezionati saranno abilitati per impostazione predefinita."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Tipo(i) di previsione",
"timestep": "Minuti tra le previsioni di NowCast"
},
"description": "Se scegli di abilitare l'entit\u00e0 di previsione `nowcast`, puoi configurare il numero di minuti tra ogni previsione. Il numero di previsioni fornite dipende dal numero di minuti scelti tra le previsioni.",
"title": "Aggiorna le opzioni di ClimaCell"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,32 @@
{
"config": {
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_api_key": "Ongeldige API-sleutel",
"unknown": "Onverwachte fout"
},
"step": {
"user": {
"data": {
"api_key": "API-sleutel",
"latitude": "Breedtegraad",
"longitude": "Lengtegraad",
"name": "Naam"
},
"description": "Indien Breedtegraad en Lengtegraad niet worden opgegeven, worden de standaardwaarden in de Home Assistant-configuratie gebruikt. Er wordt een entiteit gemaakt voor elk voorspellingstype maar alleen degene die u selecteert worden standaard ingeschakeld."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Voorspellingstype(n)"
},
"description": "Als u ervoor kiest om de `nowcast` voorspellingsentiteit in te schakelen, kan u het aantal minuten tussen elke voorspelling configureren. Het aantal voorspellingen hangt af van het aantal gekozen minuten tussen de voorspellingen.",
"title": "Update ClimaCell Opties"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "Tilkobling mislyktes",
"invalid_api_key": "Ugyldig API-n\u00f8kkel",
"rate_limited": "Prisen er for \u00f8yeblikket begrenset. Pr\u00f8v igjen senere.",
"unknown": "Uventet feil"
},
"step": {
"user": {
"data": {
"api_key": "API-n\u00f8kkel",
"latitude": "Breddegrad",
"longitude": "Lengdegrad",
"name": "Navn"
},
"description": "Hvis Breddegrad og Lengdegrad ikke er oppgitt, vil standardverdiene i Home Assistant-konfigurasjonen bli brukt. Det blir opprettet en enhet for hver prognosetype, men bare de du velger blir aktivert som standard."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "Prognosetype(r)",
"timestep": "Min. mellom NowCast prognoser"
},
"description": "Hvis du velger \u00e5 aktivere \u00abnowcast\u00bb -varselenheten, kan du konfigurere antall minutter mellom hver prognose. Antall angitte prognoser avhenger av antall minutter som er valgt mellom prognosene.",
"title": "Oppdater ClimaCell Alternativer"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f.",
"invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API.",
"rate_limited": "\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.",
"unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430."
},
"step": {
"user": {
"data": {
"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": "\u0415\u0441\u043b\u0438 \u0428\u0438\u0440\u043e\u0442\u0430 \u0438 \u0414\u043e\u043b\u0433\u043e\u0442\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Home Assistant. \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430, \u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0412\u0430\u043c\u0438."
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "\u0422\u0438\u043f(\u044b) \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430",
"timestep": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (\u0432 \u043c\u0438\u043d\u0443\u0442\u0430\u0445)"
},
"description": "\u0415\u0441\u043b\u0438 \u0412\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 'nowcast', \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430.",
"title": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 ClimaCell"
}
}
},
"title": "ClimaCell"
}

View File

@@ -0,0 +1,34 @@
{
"config": {
"error": {
"cannot_connect": "\u9023\u7dda\u5931\u6557",
"invalid_api_key": "API \u5bc6\u9470\u7121\u6548",
"rate_limited": "\u9054\u5230\u9650\u5236\u983b\u7387\u3001\u8acb\u7a0d\u5019\u518d\u8a66\u3002",
"unknown": "\u672a\u9810\u671f\u932f\u8aa4"
},
"step": {
"user": {
"data": {
"api_key": "API \u5bc6\u9470",
"latitude": "\u7def\u5ea6",
"longitude": "\u7d93\u5ea6",
"name": "\u540d\u7a31"
},
"description": "\u5047\u5982\u672a\u63d0\u4f9b\u7def\u5ea6\u8207\u7d93\u5ea6\uff0c\u5c07\u6703\u4f7f\u7528 Home Assistant \u8a2d\u5b9a\u4f5c\u70ba\u9810\u8a2d\u503c\u3002\u6bcf\u4e00\u500b\u9810\u5831\u985e\u578b\u90fd\u6703\u7522\u751f\u4e00\u7d44\u5be6\u9ad4\uff0c\u6216\u8005\u9810\u8a2d\u70ba\u6240\u9078\u64c7\u555f\u7528\u7684\u9810\u5831\u3002"
}
}
},
"options": {
"step": {
"init": {
"data": {
"forecast_types": "\u9810\u5831\u985e\u578b",
"timestep": "NowCast \u9810\u5831\u9593\u9694\u5206\u9418"
},
"description": "\u5047\u5982\u9078\u64c7\u958b\u555f `nowcast` \u9810\u5831\u5be6\u9ad4\u3001\u5c07\u53ef\u4ee5\u8a2d\u5b9a\u9810\u5831\u983b\u7387\u9593\u9694\u5206\u9418\u6578\u3002\u6839\u64da\u6240\u8f38\u5165\u7684\u9593\u9694\u6642\u9593\u5c07\u6c7a\u5b9a\u9810\u5831\u7684\u6578\u76ee\u3002",
"title": "\u66f4\u65b0 ClimaCell \u9078\u9805"
}
}
},
"title": "ClimaCell"
}

View File

@@ -1,4 +1,5 @@
"""Weather component that handles meteorological data for your location."""
from datetime import datetime
import logging
from typing import Any, Callable, Dict, List, Optional
@@ -21,7 +22,6 @@ from homeassistant.const import (
LENGTH_MILES,
PRESSURE_HPA,
PRESSURE_INHG,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
)
from homeassistant.helpers.entity import Entity
@@ -30,7 +30,6 @@ from homeassistant.helpers.typing import HomeAssistantType
from homeassistant.util import dt as dt_util
from homeassistant.util.distance import convert as distance_convert
from homeassistant.util.pressure import convert as pressure_convert
from homeassistant.util.temperature import convert as temp_convert
from . import ClimaCellDataUpdateCoordinator, ClimaCellEntity
from .const import (
@@ -80,7 +79,7 @@ def _translate_condition(
def _forecast_dict(
hass: HomeAssistantType,
time: str,
forecast_dt: datetime,
use_datetime: bool,
condition: str,
precipitation: Optional[float],
@@ -92,10 +91,7 @@ def _forecast_dict(
) -> Dict[str, Any]:
"""Return formatted Forecast dict from ClimaCell forecast data."""
if use_datetime:
translated_condition = _translate_condition(
condition,
is_up(hass, dt_util.as_utc(dt_util.parse_datetime(time))),
)
translated_condition = _translate_condition(condition, is_up(hass, forecast_dt))
else:
translated_condition = _translate_condition(condition, True)
@@ -104,15 +100,11 @@ def _forecast_dict(
precipitation = (
distance_convert(precipitation / 12, LENGTH_FEET, LENGTH_METERS) * 1000
)
if temp:
temp = temp_convert(temp, TEMP_FAHRENHEIT, TEMP_CELSIUS)
if temp_low:
temp_low = temp_convert(temp_low, TEMP_FAHRENHEIT, TEMP_CELSIUS)
if wind_speed:
wind_speed = distance_convert(wind_speed, LENGTH_MILES, LENGTH_KILOMETERS)
data = {
ATTR_FORECAST_TIME: time,
ATTR_FORECAST_TIME: forecast_dt.isoformat(),
ATTR_FORECAST_CONDITION: translated_condition,
ATTR_FORECAST_PRECIPITATION: precipitation,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: precipitation_probability,
@@ -246,7 +238,9 @@ class ClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity):
# Set default values (in cases where keys don't exist), None will be
# returned. Override properties per forecast type as needed
for forecast in self.coordinator.data[FORECASTS][self.forecast_type]:
timestamp = self._get_cc_value(forecast, CC_ATTR_TIMESTAMP)
forecast_dt = dt_util.parse_datetime(
self._get_cc_value(forecast, CC_ATTR_TIMESTAMP)
)
use_datetime = True
condition = self._get_cc_value(forecast, CC_ATTR_CONDITION)
precipitation = self._get_cc_value(forecast, CC_ATTR_PRECIPITATION)
@@ -260,6 +254,7 @@ class ClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity):
if self.forecast_type == DAILY:
use_datetime = False
forecast_dt = dt_util.start_of_local_day(forecast_dt)
precipitation = self._get_cc_value(
forecast, CC_ATTR_PRECIPITATION_DAILY
)
@@ -290,7 +285,7 @@ class ClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity):
forecasts.append(
_forecast_dict(
self.hass,
timestamp,
forecast_dt,
use_datetime,
condition,
precipitation,

View File

@@ -19,9 +19,9 @@
},
"user": {
"data": {
"api_token": "API \u5bc6\u9470"
"api_token": "API \u6b0a\u6756"
},
"description": "\u6b64\u6574\u5408\u9700\u8981\u5e33\u865f\u4e2d\u6240\u6709\u5340\u57df Zone:Zone:Read \u8207 Zone:DNS:Edit \u6b0a\u9650 API \u5bc6\u9470\u3002",
"description": "\u6b64\u6574\u5408\u9700\u8981\u5e33\u865f\u4e2d\u6240\u6709\u5340\u57df Zone:Zone:Read \u8207 Zone:DNS:Edit \u6b0a\u9650 API \u6b0a\u6756\u3002",
"title": "\u9023\u7dda\u81f3 Cloudflare"
},
"zone": {

View File

@@ -6,7 +6,8 @@
"open": "Open {entity_name}",
"open_tilt": "Open de kanteling {entity_name}",
"set_position": "Stel de positie van {entity_name} in",
"set_tilt_position": "Stel de {entity_name} kantelpositie in"
"set_tilt_position": "Stel de {entity_name} kantelpositie in",
"stop": "Stop {entity_name}"
},
"condition_type": {
"is_closed": "{entity_name} is gesloten",

View File

@@ -5,7 +5,9 @@
"cannot_connect": "Kon niet verbinden"
},
"error": {
"invalid_auth": "Ongeldige authenticatie"
"cannot_connect": "Kan geen verbinding maken",
"invalid_auth": "Ongeldige authenticatie",
"unknown": "Onverwachte fout"
},
"step": {
"user": {

View File

@@ -2,6 +2,6 @@
"domain": "doods",
"name": "DOODS - Dedicated Open Object Detection Service",
"documentation": "https://www.home-assistant.io/integrations/doods",
"requirements": ["pydoods==1.0.2", "pillow==8.1.0"],
"requirements": ["pydoods==1.0.2", "pillow==8.1.1"],
"codeowners": []
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Ger\u00e4t ist bereits konfiguriert",
"cannot_connect": "Verbindung fehlgeschlagen",
"invalid_auth": "Ung\u00fcltige Authentifizierung"
},
"error": {
"cannot_connect": "Verbindung fehlgeschlagen",
"invalid_auth": "Ung\u00fcltige Authentifizierung"
},
"step": {
"user": {
"data": {
"email": "E-Mail",
"password": "Passwort"
}
}
}
}
}

View File

@@ -0,0 +1,7 @@
{
"config": {
"abort": {
"single_instance_allowed": "Al geconfigureerd. Slechts een enkele configuratie mogelijk."
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Aeroport ja est\u00e0 configurat."
},
"error": {
"cannot_connect": "Ha fallat la connexi\u00f3",
"invalid_airport": "Codi d'aeroport inv\u00e0lid",
"unknown": "Error inesperat"
},
"step": {
"user": {
"data": {
"id": "Aeroport"
},
"description": "Introdueix codi d'un aeroport dels EUA en format IATA",
"title": "FAA Delays"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"config": {
"error": {
"cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
}
}
}

View File

@@ -0,0 +1,8 @@
{
"config": {
"error": {
"cannot_connect": "Verbindung fehlgeschlagen",
"unknown": "Unerwarteter Fehler"
}
}
}

View File

@@ -4,16 +4,18 @@
"already_configured": "This airport is already configured."
},
"error": {
"invalid_airport": "Airport code is not valid"
"cannot_connect": "Failed to connect",
"invalid_airport": "Airport code is not valid",
"unknown": "Unexpected error"
},
"step": {
"user": {
"title": "FAA Delays",
"description": "Enter a US Airport Code in IATA Format",
"data": {
"id": "Airport"
}
},
"description": "Enter a US Airport Code in IATA Format",
"title": "FAA Delays"
}
}
}
}
}

View File

@@ -0,0 +1,19 @@
{
"config": {
"abort": {
"already_configured": "Este aeropuerto ya est\u00e1 configurado."
},
"error": {
"invalid_airport": "El c\u00f3digo del aeropuerto no es v\u00e1lido"
},
"step": {
"user": {
"data": {
"id": "Aeropuerto"
},
"description": "Introduzca un c\u00f3digo de aeropuerto estadounidense en formato IATA",
"title": "Retrasos de la FAA"
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "See lennujaam on juba seadistatud."
},
"error": {
"cannot_connect": "\u00dchendumine nurjus",
"invalid_airport": "Lennujaama kood ei sobi",
"unknown": "Ootamatu t\u00f5rge"
},
"step": {
"user": {
"data": {
"id": "Lennujaam"
},
"description": "Sisesta USA lennujaama kood IATA vormingus",
"title": ""
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Cet a\u00e9roport est d\u00e9j\u00e0 configur\u00e9."
},
"error": {
"cannot_connect": "\u00c9chec de connexion",
"invalid_airport": "Le code de l'a\u00e9roport n'est pas valide",
"unknown": "Erreur inattendue"
},
"step": {
"user": {
"data": {
"id": "A\u00e9roport"
},
"description": "Entrez un code d'a\u00e9roport am\u00e9ricain au format IATA",
"title": "D\u00e9lais FAA"
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"config": {
"abort": {
"already_configured": "\u05e0\u05de\u05dc \u05ea\u05e2\u05d5\u05e4\u05d4 \u05d6\u05d4 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8"
},
"error": {
"cannot_connect": "\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05e0\u05db\u05e9\u05dc\u05d4",
"unknown": "\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d1\u05dc\u05ea\u05d9 \u05e6\u05e4\u05d5\u05d9\u05d4"
},
"step": {
"user": {
"data": {
"id": "\u05e0\u05de\u05dc \u05ea\u05e2\u05d5\u05e4\u05d4"
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Questo aeroporto \u00e8 gi\u00e0 configurato."
},
"error": {
"cannot_connect": "Impossibile connettersi",
"invalid_airport": "Il codice dell'aeroporto non \u00e8 valido",
"unknown": "Errore imprevisto"
},
"step": {
"user": {
"data": {
"id": "Aeroporto"
},
"description": "Immettere un codice aeroporto statunitense in formato IATA",
"title": "Ritardi FAA"
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Deze luchthaven is al geconfigureerd."
},
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_airport": "Luchthavencode is ongeldig",
"unknown": "Onverwachte fout"
},
"step": {
"user": {
"data": {
"id": "Luchthaven"
},
"description": "Voer een Amerikaanse luchthavencode in IATA-indeling in",
"title": "FAA-vertragingen"
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "Denne flyplassen er allerede konfigurert"
},
"error": {
"cannot_connect": "Tilkobling mislyktes",
"invalid_airport": "Flyplasskoden er ikke gyldig",
"unknown": "Uventet feil"
},
"step": {
"user": {
"data": {
"id": "Flyplass"
},
"description": "Skriv inn en amerikansk flyplasskode i IATA-format",
"title": "FAA forsinkelser"
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430."
},
"error": {
"cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f.",
"invalid_airport": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430.",
"unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430."
},
"step": {
"user": {
"data": {
"id": "\u0410\u044d\u0440\u043e\u043f\u043e\u0440\u0442"
},
"description": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0430\u044d\u0440\u043e\u043f\u043e\u0440\u0442\u0430 \u0421\u0428\u0410 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 IATA.",
"title": "FAA Delays"
}
}
}
}

View File

@@ -0,0 +1,21 @@
{
"config": {
"abort": {
"already_configured": "\u6b64\u6a5f\u5834\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210"
},
"error": {
"cannot_connect": "\u9023\u7dda\u5931\u6557",
"invalid_airport": "\u6a5f\u5834\u4ee3\u78bc\u7121\u6548",
"unknown": "\u672a\u9810\u671f\u932f\u8aa4"
},
"step": {
"user": {
"data": {
"id": "\u6a5f\u5834"
},
"description": "\u8f38\u5165\u7f8e\u570b\u6a5f\u5834 IATA \u4ee3\u78bc",
"title": "FAA \u822a\u73ed\u5ef6\u8aa4"
}
}
}
}

View File

@@ -77,6 +77,7 @@ _NOT_SPEED_INTERVAL = "interval"
_NOT_SPEED_IDLE = "idle"
_NOT_SPEED_FAVORITE = "favorite"
_NOT_SPEED_SLEEP = "sleep"
_NOT_SPEED_SILENT = "silent"
_NOT_SPEEDS_FILTER = {
_NOT_SPEED_OFF,
@@ -85,6 +86,7 @@ _NOT_SPEEDS_FILTER = {
_NOT_SPEED_SMART,
_NOT_SPEED_INTERVAL,
_NOT_SPEED_IDLE,
_NOT_SPEED_SILENT,
_NOT_SPEED_SLEEP,
_NOT_SPEED_FAVORITE,
}
@@ -652,7 +654,7 @@ def speed_list_without_preset_modes(speed_list: List):
output: ["1", "2", "3", "4", "5", "6", "7"]
input: ["Auto", "Silent", "Favorite", "Idle", "Medium", "High", "Strong"]
output: ["Silent", "Medium", "High", "Strong"]
output: ["Medium", "High", "Strong"]
"""
return [speed for speed in speed_list if speed.lower() not in _NOT_SPEEDS_FILTER]
@@ -674,7 +676,7 @@ def preset_modes_from_speed_list(speed_list: List):
output: ["smart"]
input: ["Auto", "Silent", "Favorite", "Idle", "Medium", "High", "Strong"]
output: ["Auto", "Favorite", "Idle"]
output: ["Auto", "Silent", "Favorite", "Idle"]
"""
return [

View File

@@ -14,7 +14,8 @@
"reauth": {
"data": {
"password": "Wachtwoord"
}
},
"description": "Authenticatietokens zijn ongeldig geworden, log in om ze opnieuw te maken."
},
"user": {
"data": {

View File

@@ -15,7 +15,7 @@
"data": {
"password": "Passord"
},
"description": "Godkjenningstokener ble ugyldige, logg inn for \u00e5 gjenopprette dem"
"description": "Autentiseringstokener ble ugyldige, logg inn for \u00e5 gjenskape dem."
},
"user": {
"data": {

View File

@@ -15,7 +15,7 @@
"data": {
"password": "\u5bc6\u78bc"
},
"description": "\u8a8d\u8b49\u5bc6\u9470\u5df2\u7d93\u5931\u6548\uff0c\u8acb\u767b\u5165\u91cd\u65b0\u65b0\u589e\u3002"
"description": "\u8a8d\u8b49\u6b0a\u6756\u5df2\u7d93\u5931\u6548\uff0c\u8acb\u767b\u5165\u91cd\u65b0\u65b0\u589e\u3002"
},
"user": {
"data": {

View File

@@ -0,0 +1,7 @@
{
"config": {
"abort": {
"cannot_connect": "Kan geen verbinding maken"
}
}
}

View File

@@ -3,6 +3,9 @@
"abort": {
"already_configured": "Deze co\u00f6rdinaten zijn al geregistreerd."
},
"error": {
"unknown": "Onverwachte fout"
},
"step": {
"user": {
"data": {

View File

@@ -24,7 +24,7 @@
"password": "Passwort",
"username": "Benutzername"
},
"description": "Aktualisiere deine Anmeldeinformationen f\u00fcr {name} ."
"description": "Aktualisiere deine Anmeldeinformationen f\u00fcr {name}."
},
"user": {
"data": {

View File

@@ -3,6 +3,7 @@
"abort": {
"already_configured": "Deze AVM FRITZ!Box is al geconfigureerd.",
"already_in_progress": "AVM FRITZ!Box configuratie is al bezig.",
"no_devices_found": "Geen apparaten gevonden op het netwerk",
"not_supported": "Verbonden met AVM FRITZ! Box, maar het kan geen Smart Home-apparaten bedienen.",
"reauth_successful": "Herauthenticatie was succesvol"
},

View File

@@ -3,7 +3,7 @@
"name": "Home Assistant Frontend",
"documentation": "https://www.home-assistant.io/integrations/frontend",
"requirements": [
"home-assistant-frontend==20210225.0"
"home-assistant-frontend==20210302.6"
],
"dependencies": [
"api",

View File

@@ -35,6 +35,7 @@ from homeassistant.const import (
STATE_UNKNOWN,
)
from homeassistant.core import DOMAIN as HA_DOMAIN, CoreState, callback
from homeassistant.exceptions import ConditionError
from homeassistant.helpers import condition
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import (
@@ -439,12 +440,16 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
current_state = STATE_ON
else:
current_state = HVAC_MODE_OFF
long_enough = condition.state(
self.hass,
self.heater_entity_id,
current_state,
self.min_cycle_duration,
)
try:
long_enough = condition.state(
self.hass,
self.heater_entity_id,
current_state,
self.min_cycle_duration,
)
except ConditionError:
long_enough = False
if not long_enough:
return

View File

@@ -228,18 +228,25 @@ class GitHubData:
self.stargazers = repo.stargazers_count
self.forks = repo.forks_count
open_issues = repo.get_issues(state="open", sort="created")
if open_issues is not None:
self.open_issue_count = open_issues.totalCount
if open_issues.totalCount > 0:
self.latest_open_issue_url = open_issues[0].html_url
open_pull_requests = repo.get_pulls(state="open", sort="created")
if open_pull_requests is not None:
self.pull_request_count = open_pull_requests.totalCount
if open_pull_requests.totalCount > 0:
self.latest_open_pr_url = open_pull_requests[0].html_url
open_issues = repo.get_issues(state="open", sort="created")
if open_issues is not None:
if self.pull_request_count is None:
self.open_issue_count = open_issues.totalCount
else:
# pull requests are treated as issues too so we need to reduce the received count
self.open_issue_count = (
open_issues.totalCount - self.pull_request_count
)
if open_issues.totalCount > 0:
self.latest_open_issue_url = open_issues[0].html_url
latest_commit = repo.get_commits()[0]
self.latest_commit_sha = latest_commit.sha
self.latest_commit_message = latest_commit.commit.message

View File

@@ -11,6 +11,7 @@
"step": {
"user": {
"data": {
"host": "Host",
"name": "Naam"
},
"description": "Eerst moet u de Goal Zero-app downloaden: https://www.goalzero.com/product-features/yeti-app/ \n\n Volg de instructies om je Yeti te verbinden met je wifi-netwerk. Haal dan de host-ip van uw router. DHCP moet zijn ingesteld in uw routerinstellingen voor het apparaat om ervoor te zorgen dat het host-ip niet verandert. Raadpleeg de gebruikershandleiding van uw router."

View File

@@ -15,7 +15,7 @@
"username": "Gebruikersnaam"
},
"description": "Geef hieronder de vereiste informatie op.",
"title": "Stel GogoGate2 in"
"title": "Stel GogoGate2 of iSmartGate in"
}
}
}

View File

@@ -0,0 +1,17 @@
{
"config": {
"error": {
"invalid_credentials": "Ung\u00fcltige Authentifizierung",
"unknown": "Unerwarteter Fehler"
},
"step": {
"user": {
"data": {
"api_key": "API-Schl\u00fcssel",
"url": "URL"
}
}
}
},
"title": "Habitica"
}

View File

@@ -22,17 +22,8 @@ class HarmonyData(HarmonySubscriberMixin):
self._name = name
self._unique_id = unique_id
self._available = False
callbacks = {
"config_updated": self._config_updated,
"connect": self._connected,
"disconnect": self._disconnected,
"new_activity_starting": self._activity_starting,
"new_activity": self._activity_started,
}
self._client = HarmonyClient(
ip_address=address, callbacks=ClientCallbackType(**callbacks)
)
self._client = None
self._address = address
@property
def activities(self):
@@ -105,6 +96,18 @@ class HarmonyData(HarmonySubscriberMixin):
async def connect(self) -> bool:
"""Connect to the Harmony Hub."""
_LOGGER.debug("%s: Connecting", self._name)
callbacks = {
"config_updated": self._config_updated,
"connect": self._connected,
"disconnect": self._disconnected,
"new_activity_starting": self._activity_starting,
"new_activity": self._activity_started,
}
self._client = HarmonyClient(
ip_address=self._address, callbacks=ClientCallbackType(**callbacks)
)
try:
if not await self._client.connect():
_LOGGER.warning("%s: Unable to connect to HUB", self._name)
@@ -113,6 +116,7 @@ class HarmonyData(HarmonySubscriberMixin):
except aioexc.TimeOut:
_LOGGER.warning("%s: Connection timed-out", self._name)
return False
return True
async def shutdown(self):
@@ -159,10 +163,12 @@ class HarmonyData(HarmonySubscriberMixin):
)
return
await self.async_lock_start_activity()
try:
await self._client.start_activity(activity_id)
except aioexc.TimeOut:
_LOGGER.error("%s: Starting activity %s timed-out", self.name, activity)
self.async_unlock_start_activity()
async def async_power_off(self):
"""Start the PowerOff activity."""

View File

@@ -1,5 +1,6 @@
"""Mixin class for handling harmony callback subscriptions."""
import asyncio
import logging
from typing import Any, Callable, NamedTuple, Optional
@@ -29,6 +30,17 @@ class HarmonySubscriberMixin:
super().__init__()
self._hass = hass
self._subscriptions = []
self._activity_lock = asyncio.Lock()
async def async_lock_start_activity(self):
"""Acquire the lock."""
await self._activity_lock.acquire()
@callback
def async_unlock_start_activity(self):
"""Release the lock."""
if self._activity_lock.locked():
self._activity_lock.release()
@callback
def async_subscribe(self, update_callbacks: HarmonyCallback) -> Callable:
@@ -51,11 +63,13 @@ class HarmonySubscriberMixin:
def _connected(self, _=None) -> None:
_LOGGER.debug("connected")
self.async_unlock_start_activity()
self._available = True
self._call_callbacks("connected")
def _disconnected(self, _=None) -> None:
_LOGGER.debug("disconnected")
self.async_unlock_start_activity()
self._available = False
self._call_callbacks("disconnected")
@@ -65,6 +79,7 @@ class HarmonySubscriberMixin:
def _activity_started(self, activity_info: tuple) -> None:
_LOGGER.debug("activity %s started", activity_info)
self.async_unlock_start_activity()
self._call_callbacks("activity_started", activity_info)
def _call_callbacks(self, callback_func_name: str, argument: tuple = None):

View File

@@ -169,6 +169,18 @@ async def async_uninstall_addon(hass: HomeAssistantType, slug: str) -> dict:
return await hassio.send_command(command, timeout=60)
@bind_hass
@api_data
async def async_update_addon(hass: HomeAssistantType, slug: str) -> dict:
"""Update add-on.
The caller of the function should handle HassioAPIError.
"""
hassio = hass.data[DOMAIN]
command = f"/addons/{slug}/update"
return await hassio.send_command(command, timeout=None)
@bind_hass
@api_data
async def async_start_addon(hass: HomeAssistantType, slug: str) -> dict:
@@ -218,6 +230,21 @@ async def async_get_addon_discovery_info(
return next((addon for addon in discovered_addons if addon["addon"] == slug), None)
@bind_hass
@api_data
async def async_create_snapshot(
hass: HomeAssistantType, payload: dict, partial: bool = False
) -> dict:
"""Create a full or partial snapshot.
The caller of the function should handle HassioAPIError.
"""
hassio = hass.data[DOMAIN]
snapshot_type = "partial" if partial else "full"
command = f"/snapshots/new/{snapshot_type}"
return await hassio.send_command(command, payload=payload, timeout=None)
@callback
@bind_hass
def get_info(hass):

View File

@@ -4,6 +4,7 @@
"already_configured": "Apparaat is al geconfigureerd"
},
"error": {
"cannot_connect": "Kan geen verbinding maken",
"invalid_auth": "Ongeldige authenticatie",
"unknown": "Onverwachte fout"
},

View File

@@ -1,7 +1,8 @@
{
"config": {
"abort": {
"missing_configuration": "Het component is niet geconfigureerd. Volg de documentatie."
"missing_configuration": "Het component is niet geconfigureerd. Volg de documentatie.",
"no_url_available": "Geen URL beschikbaar. Voor informatie over deze fout, [check de helpsectie]({docs_url})"
},
"create_entry": {
"default": "Succesvol geverifieerd"

View File

@@ -491,8 +491,11 @@ class HomeKit:
# as pyhap uses a random one until state is restored
if os.path.exists(persist_file):
self.driver.load()
else:
self.driver.persist()
self.driver.state.config_version += 1
if self.driver.state.config_version > 65535:
self.driver.state.config_version = 1
self.driver.persist()
def reset_accessories(self, entity_ids):
"""Reset the accessory to load the latest configuration."""
@@ -613,7 +616,7 @@ class HomeKit:
self._async_register_bridge(dev_reg)
await self._async_start(bridged_states)
_LOGGER.debug("Driver start for %s", self._name)
self.hass.add_job(self.driver.start_service)
await self.driver.async_start()
self.status = STATUS_RUNNING
@callback

View File

@@ -3,7 +3,7 @@
"name": "HomeKit",
"documentation": "https://www.home-assistant.io/integrations/homekit",
"requirements": [
"HAP-python==3.3.0",
"HAP-python==3.4.0",
"fnvhash==0.1.0",
"PyQRCode==1.2.1",
"base36==0.1.1",

View File

@@ -19,7 +19,7 @@
"title": "Selecciona els dominis a incloure"
},
"pairing": {
"description": "Tan aviat com {name} estigui llest, la vinculaci\u00f3 estar\u00e0 disponible a \"Notificacions\" com a \"Configuraci\u00f3 de l'enlla\u00e7 HomeKit\".",
"description": "Per completar la vinculaci\u00f3, segueix les instruccions a \"Configuraci\u00f3 de l'enlla\u00e7 HomeKit\" sota \"Notificacions\".",
"title": "Vinculaci\u00f3 HomeKit"
},
"user": {
@@ -28,8 +28,8 @@
"include_domains": "Dominis a incloure",
"mode": "Mode"
},
"description": "La integraci\u00f3 HomeKit et permetr\u00e0 l'acc\u00e9s a les teves entitats de Home Assistant a HomeKit. En mode enlla\u00e7, els enlla\u00e7os HomeKit estan limitats a un m\u00e0xim de 150 accessoris per inst\u00e0ncia (incl\u00f2s el propi enlla\u00e7). Si volguessis enlla\u00e7ar m\u00e9s accessoris que el m\u00e0xim perm\u00e8s, \u00e9s recomanable que utilitzis diferents enlla\u00e7os HomeKit per a dominis diferents. La configuraci\u00f3 avan\u00e7ada d'entitat nom\u00e9s est\u00e0 disponible en YAML. Per obtenir el millor rendiment i evitar errors de disponibilitat inesperats , crea i vincula una inst\u00e0ncia HomeKit en mode accessori per a cada repoductor multim\u00e8dia/TV i c\u00e0mera.",
"title": "Activaci\u00f3 de HomeKit"
"description": "Selecciona els dominis a incloure. S'inclouran totes les entitats del domini compatibles. Es crear\u00e0 una inst\u00e0ncia HomeKit en mode accessori per a cada repoductor multim\u00e8dia/TV i c\u00e0mera.",
"title": "Selecciona els dominis a incloure"
}
}
},
@@ -55,7 +55,7 @@
"entities": "Entitats",
"mode": "Mode"
},
"description": "Tria les entitats que vulguis incloure. En mode accessori, nom\u00e9s s'inclou una sola entitat. En mode enlla\u00e7 inclusiu, s'exposaran totes les entitats del domini tret de que se'n seleccionin algunes en concret. En mode enlla\u00e7 excusiu, s'inclouran totes les entitats del domini excepte les entitats excloses. Per obtenir el millor rendiment i evitar errors de disponibilitat inesperats , crea i vincula una inst\u00e0ncia HomeKit en mode accessori per a cada repoductor multim\u00e8dia/TV i c\u00e0mera.",
"description": "Tria les entitats que vulguis incloure. En mode accessori, nom\u00e9s s'inclou una sola entitat. En mode enlla\u00e7 inclusiu, s'exposaran totes les entitats del domini tret de que se'n seleccionin algunes en concret. En mode enlla\u00e7 excusiu, s'inclouran totes les entitats del domini excepte les entitats excloses. Per obtenir el millor rendiment, es crea una inst\u00e0ncia HomeKit per a cada repoductor multim\u00e8dia/TV i c\u00e0mera.",
"title": "Selecciona les entitats a incloure"
},
"init": {

View File

@@ -17,7 +17,7 @@
"include_domains": "Dom\u00e9ny, kter\u00e9 maj\u00ed b\u00fdt zahrnuty",
"mode": "Re\u017eim"
},
"title": "Aktivace HomeKit"
"title": "Vyberte dom\u00e9ny, kter\u00e9 chcete zahrnout"
}
}
},

View File

@@ -4,13 +4,29 @@
"port_name_in_use": "An accessory or bridge with the same name or port is already configured."
},
"step": {
"accessory_mode": {
"data": {
"entity_id": "Entity"
},
"description": "Choose the entity to be included. In accessory mode, only a single entity is included.",
"title": "Select entity to be included"
},
"bridge_mode": {
"data": {
"include_domains": "Domains to include"
},
"description": "Choose the domains to be included. All supported entities in the domain will be included.",
"title": "Select domains to be included"
},
"pairing": {
"description": "To complete pairing following the instructions in \u201cNotifications\u201d under \u201cHomeKit Pairing\u201d.",
"title": "Pair HomeKit"
},
"user": {
"data": {
"include_domains": "Domains to include"
"auto_start": "Autostart (disable if using Z-Wave or other delayed start system)",
"include_domains": "Domains to include",
"mode": "Mode"
},
"description": "Choose the domains to be included. All supported entities in the domain will be included. A separate HomeKit instance in accessory mode will be created for each tv media player and camera.",
"title": "Select domains to be included"
@@ -21,7 +37,8 @@
"step": {
"advanced": {
"data": {
"auto_start": "Autostart (disable if you are calling the homekit.start service manually)"
"auto_start": "Autostart (disable if you are calling the homekit.start service manually)",
"safe_mode": "Safe Mode (enable only if pairing fails)"
},
"description": "These settings only need to be adjusted if HomeKit is not functional.",
"title": "Advanced Configuration"

View File

@@ -19,7 +19,7 @@
"title": "Vali kaasatavad domeenid"
},
"pairing": {
"description": "Niipea kui {name} on valmis, on sidumine saadaval jaotises \"Notifications\" kui \"HomeKit Bridge Setup\".",
"description": "Sidumise l\u00f5puleviimiseks j\u00e4rgi jaotises \"HomeKiti sidumine\" toodud juhiseid alajaotises \"Teatised\".",
"title": "HomeKiti sidumine"
},
"user": {
@@ -28,8 +28,8 @@
"include_domains": "Kaasatavad domeenid",
"mode": "Re\u017eiim"
},
"description": "HomeKiti integreerimine v\u00f5imaldab teil p\u00e4\u00e4seda juurde HomeKiti \u00fcksustele Home Assistant. Sildire\u017eiimis on HomeKit Bridges piiratud 150 lisaseadmega, sealhulgas sild ise. Kui soovid \u00fchendada rohkem lisatarvikuid, on soovitatav kasutada erinevate domeenide jaoks mitut HomeKiti silda. \u00dcksuse \u00fcksikasjalik konfiguratsioon on esmase silla jaoks saadaval ainult YAML-i kaudu. Parema tulemuse saavutamiseks ja ootamatute seadmete kadumise v\u00e4ltimiseks loo ja seo eraldi HomeKiti seade tarviku re\u017eiimis kga meediaesitaja ja kaamera jaoks.",
"title": "Aktiveeri HomeKit"
"description": "Vali kaasatavad domeenid. Kaasatakse k\u00f5ik domeenis toetatud olemid. Iga telemeedia pleieri ja kaamera jaoks luuakse eraldi HomeKiti eksemplar tarvikure\u017eiimis.",
"title": "Vali kaasatavad domeenid"
}
}
},
@@ -55,12 +55,12 @@
"entities": "Olemid",
"mode": "Re\u017eiim"
},
"description": "Vali kaasatavad olemid. Tarvikute re\u017eiimis on kaasatav ainult \u00fcks olem. Silla re\u017eiimis, kuvatakse k\u00f5ik domeeni olemid, v\u00e4lja arvatud juhul, kui valitud on kindlad olemid. Silla v\u00e4listamisre\u017eiimis kaasatakse k\u00f5ik domeeni olemid, v\u00e4lja arvatud v\u00e4listatud olemid.",
"description": "Vali kaasatavad olemid. Tarvikute re\u017eiimis on kaasatav ainult \u00fcks olem. Silla re\u017eiimis, kuvatakse k\u00f5ik domeeni olemid, v\u00e4lja arvatud juhul, kui valitud on kindlad olemid. Silla v\u00e4listamisre\u017eiimis kaasatakse k\u00f5ik domeeni olemid, v\u00e4lja arvatud v\u00e4listatud olemid. Parima kasutuskogemuse jaoks on eraldi HomeKit seadmed iga meediumim\u00e4ngija ja kaamera jaoks.",
"title": "Vali kaasatavd olemid"
},
"init": {
"data": {
"include_domains": "Kaasatavad domeenid",
"include_domains": "Kaasatud domeenid",
"mode": "Re\u017eiim"
},
"description": "HomeKiti saab seadistada silla v\u00f5i \u00fche lisaseadme avaldamiseks. Lisare\u017eiimis saab kasutada ainult \u00fchte \u00fcksust. Teleriseadmete klassiga meediumipleierite n\u00f5uetekohaseks toimimiseks on vaja lisare\u017eiimi. \u201eKaasatavate domeenide\u201d \u00fcksused puutuvad kokku HomeKitiga. J\u00e4rgmisel ekraanil saad valida, millised \u00fcksused sellesse loendisse lisada v\u00f5i sellest v\u00e4lja j\u00e4tta.",

View File

@@ -19,7 +19,7 @@
"title": "S\u00e9lectionnez les domaines \u00e0 inclure"
},
"pairing": {
"description": "D\u00e8s que le pont {name} est pr\u00eat, l'appairage sera disponible dans \"Notifications\" sous \"Configuration de la Passerelle HomeKit\".",
"description": "Pour compl\u00e9ter l'appariement, suivez les instructions dans les \"Notifications\" sous \"Appariement HomeKit\".",
"title": "Appairage de la Passerelle Homekit"
},
"user": {
@@ -28,8 +28,8 @@
"include_domains": "Domaines \u00e0 inclure",
"mode": "Mode"
},
"description": "La passerelle HomeKit vous permettra d'acc\u00e9der \u00e0 vos entit\u00e9s Home Assistant dans HomeKit. Les passerelles HomeKit sont limit\u00e9es \u00e0 150 accessoires par instance, y compris la passerelle elle-m\u00eame. Si vous souhaitez connecter plus que le nombre maximum d'accessoires, il est recommand\u00e9 d'utiliser plusieurs passerelles HomeKit pour diff\u00e9rents domaines. La configuration d\u00e9taill\u00e9e des entit\u00e9s est uniquement disponible via YAML pour la passerelle principale.",
"title": "Activer la Passerelle HomeKit"
"description": "Choisissez les domaines \u00e0 inclure. Toutes les entit\u00e9s prises en charge dans le domaine seront incluses. Une instance HomeKit distincte en mode accessoire sera cr\u00e9\u00e9e pour chaque lecteur multim\u00e9dia TV et cam\u00e9ra.",
"title": "S\u00e9lectionnez les domaines \u00e0 inclure"
}
}
},
@@ -60,7 +60,7 @@
},
"init": {
"data": {
"include_domains": "Domaine \u00e0 inclure",
"include_domains": "Domaines \u00e0 inclure",
"mode": "Mode"
},
"description": "Les entit\u00e9s des \u00abdomaines \u00e0 inclure\u00bb seront pont\u00e9es vers HomeKit. Vous pourrez s\u00e9lectionner les entit\u00e9s \u00e0 exclure de cette liste sur l'\u00e9cran suivant.",

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