Compare commits

..

32 Commits

Author SHA1 Message Date
Paulus Schoutsen 4eacf3f6c0 Bumped version to 0.117.0b4 2020-10-25 22:54:50 +00:00
J. Nick Koston 35d2badb24 Ensure config entry platforms are excluded from reload (#42367) 2020-10-25 22:54:40 +00:00
Andre Lengwenus 331d5ba7ef Fix parameter issue in LCN cover close/stop (#42342) 2020-10-25 22:54:40 +00:00
mezz64 a2c157b5e9 Bump pyhik to 0.2.8 (#42322) 2020-10-25 22:54:39 +00:00
Jörg Thalheim 883fb8c168 Fix iCloud matching accounts (#42303)
`name` is no longer defined but `username`.
Fixes #38393
2020-10-25 22:54:38 +00:00
airthusiast 2e7ce63cbc Fix for Fibaro HC3 support, climate temp sensor and target temp (#42300) 2020-10-25 22:54:38 +00:00
Franck Nijhof b925ae39cb Upgrade spotipy to 2.16.1 (#42293) 2020-10-25 22:54:37 +00:00
Erik Montnemery 5c608eb1bc Fix reconfiguring of Tasmota lights (#42288) 2020-10-25 22:54:36 +00:00
Erik Montnemery 3032f9280c Fix Tasmota CT light (#42287) 2020-10-25 22:54:35 +00:00
uvjustin 00284a87d0 Fix AVError and allow more missing DTS packets in stream (#42277)
* Fix AVError and allow more missing DTS in stream init

* Avoid recreating container demux iterator

* Relax missing dts requirement

* Fix spelling error

* Fix error message count

* Add timeout to av.open read

* Increase STREAM_TIMEOUT to 30
2020-10-25 22:54:35 +00:00
Alan Tse 21917e86c9 Fix Tesla attribute refreshing (#42257)
* Fix Tesla attribute refreshing

* Remove extraneous copy
2020-10-25 22:54:34 +00:00
Allen Porter b6994689b1 Update nest integration with fixes from initial PR (#42250) 2020-10-25 22:54:33 +00:00
Teemu R 0c1c7d797c Only log xiaomi_miio update exceptions once (#41226)
* xiaomi_miio: only log update exceptions once

Replaces #37695

* add som more missed exception logger cases + do not change the control flow as pointed out by @cgtobi

* Use patch&MagickMock from tests.async_mock

* Fix linting for alarm_control_panel

* update the test to verify that the warning on update is only logged when the device was previously available
2020-10-25 22:54:33 +00:00
Paulus Schoutsen 9c60195780 Bumped version to 0.117.0b3 2020-10-23 15:45:06 +00:00
J. Nick Koston d8fea1c582 Ensure event listener integrations do the queue insert as a callback (#42265) 2020-10-23 15:44:56 +00:00
Erik Montnemery 84ab40c57d Fix Tasmota relay acting as on/off light (#42259) 2020-10-23 15:44:56 +00:00
Alan Tse aace9dce38 Fix is_on test for Tesla Charger switch (#42251)
closes #41755
2020-10-23 15:44:55 +00:00
TheJulianJES f6f95d0422 Fix polling of color for ZHA lights not updating (#42248) 2020-10-23 15:44:54 +00:00
BrianWithAHat e0466d4ac8 Fix MaryTTS filename extensions (#42228)
Co-authored-by: Brian Laferriere <BrianWithAHat@users.noreply.github.com>
2020-10-23 15:44:53 +00:00
Paulus Schoutsen 8e4a325fdb Bumped version to 0.117.0b2 2020-10-22 23:33:34 +00:00
Alexei Chetroi 868b14f151 Update ZHA dependencies (#42245) 2020-10-22 23:33:22 +00:00
Bram Kragten e660577e43 Update frontend to 20201021.2 (#42242) 2020-10-22 23:33:21 +00:00
J. Nick Koston 69cace1d41 Ensure websocket event serializer cache is effective if subscription iden differs (#42226)
Since someone websocket subscriptions will use an iden of 2 for
state_changed event (most comment), and some will use another
number for all events, the cache would not be used because the
iden number was different.  We now cache only the event and
use a fast replace to insert the iden number into the serailized
response.
2020-10-22 23:33:20 +00:00
Anders Melchiorsen 4f908bc58c Refresh now() templates on second=0 (#42225) 2020-10-22 23:33:20 +00:00
rikroe d00ca7bf03 Bump bimmer-connected to 0.7.8 to fix login issue (#42215)
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2020-10-22 23:33:19 +00:00
Tom Harris 65eb5ea55f Fix issue in python > 3.8.2 (#42213) 2020-10-22 23:33:18 +00:00
Niccolo Zapponi 3586e0c5e4 Fix bug for SimpliSafe 2 systems repeatedly saying "your settings have been synchronised" (#42197)
* Fix bug for SimpliSafe 2 systems

* Improved loop and logging for SimpliSafe 2
2020-10-22 23:33:18 +00:00
Raman Gupta e0621d2e5f Set Vizio unique ID for discovery flow early and abort if configured to prevent duplicate discovery flows (#42194) 2020-10-22 23:33:17 +00:00
Erik Montnemery 1fb1bb0c08 Support reloading Tasmota config entries (#42097) 2020-10-22 23:33:16 +00:00
cgtobi 6c5e2af379 Add Netatmo sensor enable default (#41928) 2020-10-22 23:33:15 +00:00
Guido Schmitz fcbe90cb80 Fix precision of climate devices in devolo Home Control (#41832) 2020-10-22 23:33:15 +00:00
HomeAssistant Azure 3eece977f8 [ci skip] Translation update 2020-10-22 09:21:20 +02:00
216 changed files with 2078 additions and 379 deletions
@@ -27,7 +27,7 @@
"data": {
"forecast": "Prognoza pogody"
},
"description": "Ze wzgl\u0119du na ograniczenia darmowej wersji klucza API AccuWeather po w\u0142\u0105czeniu prognozy pogody aktualizacje danych b\u0119d\u0105 wykonywane co 64 minut zamiast co 32 minut.",
"description": "Ze wzgl\u0119du na ograniczenia darmowej wersji klucza API AccuWeather po w\u0142\u0105czeniu prognozy pogody aktualizacje danych b\u0119d\u0105 wykonywane co 64 minuty zamiast co 32 minuty.",
"title": "Opcje AccuWeather"
}
}
@@ -3,6 +3,9 @@
"abort": {
"existing_instance_updated": "\u66f4\u65b0\u4e86\u73b0\u6709\u914d\u7f6e\u3002"
},
"error": {
"connection_error": "\u8fde\u63a5\u5931\u8d25\u3002"
},
"step": {
"user": {
"data": {
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"ip_address": "IP\u5730\u5740"
}
}
}
}
}
@@ -0,0 +1,7 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -0,0 +1,7 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -6,6 +6,7 @@
"step": {
"protocol": {
"data": {
"device_path": "Ger\u00e4tepfad",
"host": "Host",
"port": "Port"
}
@@ -0,0 +1,14 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
},
"step": {
"protocol": {
"data": {
"port": "\u7aef\u53e3"
}
}
}
}
}
@@ -0,0 +1,8 @@
{
"config": {
"abort": {
"already_configured": "\u8d26\u53f7\u5df2\u7ecf\u8bbe\u7f6e\u5b8c\u6210",
"missing_configuration": "\u7ec4\u4ef6\u5c1a\u672a\u914d\u7f6e\u3002\u8bf7\u53c2\u89c2\u6587\u4ef6\u8bf4\u660e\u3002"
}
}
}
@@ -0,0 +1,7 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -1,8 +1,8 @@
{
"state": {
"_": {
"off": "wy\u0142\u0105czona",
"on": "w\u0142\u0105czona"
"off": "wy\u0142.",
"on": "w\u0142."
}
},
"title": "Automatyzacja"
@@ -0,0 +1,15 @@
{
"config": {
"step": {
"reauth": {
"title": "Erneute Authentifizierung"
},
"user": {
"data": {
"organization": "Organisation",
"project": "Projekt"
}
}
}
}
}
@@ -91,8 +91,8 @@
},
"state": {
"_": {
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony"
"off": "wy\u0142.",
"on": "w\u0142."
},
"battery": {
"off": "na\u0142adowana",
@@ -48,7 +48,12 @@
"connected": "{entity_name} \u5df2\u8fde\u63a5",
"gas": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u71c3\u6c14\u6cc4\u6f0f",
"hot": "{entity_name} \u53d8\u70ed",
"light": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u5149\u7ebf"
"light": "{entity_name} \u5f00\u59cb\u68c0\u6d4b\u5230\u5149\u7ebf",
"motion": "{entity_name} \u68c0\u6d4b\u5230\u6709\u4eba",
"no_motion": "{entity_name} \u672a\u68c0\u6d4b\u5230\u6709\u4eba",
"not_opened": "{entity_name}\u5df2\u5173\u95ed",
"turned_off": "{entity_name} \u88ab\u5173\u95ed",
"turned_on": "{entity_name} \u88ab\u6253\u5f00"
}
},
"state": {
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -2,7 +2,7 @@
"domain": "bmw_connected_drive",
"name": "BMW Connected Drive",
"documentation": "https://www.home-assistant.io/integrations/bmw_connected_drive",
"requirements": ["bimmer_connected==0.7.7"],
"requirements": ["bimmer_connected==0.7.8"],
"dependencies": [],
"codeowners": ["@gerard33", "@rikroe"]
}
@@ -0,0 +1,9 @@
{
"config": {
"step": {
"user": {
"description": "\u8bbe\u7f6eSony Bravia\u7535\u89c6\u96c6\u6210\u3002\u5982\u679c\u60a8\u5728\u914d\u7f6e\u65b9\u9762\u9047\u5230\u95ee\u9898\uff0c\u8bf7\u8bbf\u95ee\uff1ahttps://www.home-assistant.io/integrations/braviatv\n\u786e\u4fdd\u7535\u89c6\u5df2\u6253\u5f00\u3002"
}
}
}
}
@@ -1,10 +1,17 @@
{
"config": {
"abort": {
"not_supported": "Ger\u00e4t nicht unterst\u00fctzt"
},
"step": {
"auth": {
"title": "Authentifiziere dich beim Ger\u00e4t"
},
"finish": {
"data": {
"name": "Name"
}
},
"title": "W\u00e4hle einen Namen f\u00fcr das Ger\u00e4t"
},
"user": {
"data": {
@@ -0,0 +1,8 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25",
"snmp_error": "SNMP\u670d\u52a1\u5668\u5df2\u5173\u95ed\u6216\u4e0d\u652f\u6301\u6253\u5370\u3002"
}
}
}
@@ -0,0 +1,7 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -1,8 +1,8 @@
{
"state": {
"_": {
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony"
"off": "wy\u0142.",
"on": "w\u0142."
}
},
"title": "Kalendarz"
@@ -0,0 +1,12 @@
{
"config": {
"step": {
"user": {
"data": {
"password": "\u5bc6\u7801",
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,35 @@
{
"config": {
"abort": {
"single_instance_allowed": "Ja configurat. Nom\u00e9s \u00e9s possible una sola configuraci\u00f3.",
"unknown": "Error inesperat"
},
"error": {
"cannot_connect": "Ha fallat la connexi\u00f3",
"invalid_auth": "Autenticaci\u00f3 inv\u00e0lida",
"invalid_zone": "Zona inv\u00e0lida"
},
"flow_title": "Cloudflare: {name}",
"step": {
"records": {
"data": {
"records": "Registres"
},
"title": "Selecciona els registres a actualitzar"
},
"user": {
"data": {
"api_token": "Token d'API"
},
"description": "Aquesta integraci\u00f3 necessita un token d'API creat amb permisos d'edici\u00f3 Zone:Zone:Read i Zone:DNS:Edit per a totes les zones del teu compte.",
"title": "Connexi\u00f3 amb Cloudflare"
},
"zone": {
"data": {
"zone": "Zona"
},
"title": "Selecciona la zona a actualitzar"
}
}
}
}
@@ -0,0 +1,34 @@
{
"config": {
"abort": {
"single_instance_allowed": "Ji\u017e nastaveno. Je mo\u017en\u00e1 pouze jedin\u00e1 konfigurace.",
"unknown": "Neo\u010dek\u00e1van\u00e1 chyba"
},
"error": {
"cannot_connect": "Nepoda\u0159ilo se p\u0159ipojit",
"invalid_auth": "Neplatn\u00e9 ov\u011b\u0159en\u00ed",
"invalid_zone": "Neplatn\u00e1 z\u00f3na"
},
"flow_title": "Cloudflare: {name}",
"step": {
"records": {
"data": {
"records": "Z\u00e1znamy"
},
"title": "Vyberte z\u00e1znamy, kter\u00e9 chcete aktualizovat"
},
"user": {
"data": {
"api_token": "API token"
},
"title": "P\u0159ipojen\u00ed ke Cloudflare"
},
"zone": {
"data": {
"zone": "Z\u00f3na"
},
"title": "Vyberte z\u00f3nu, kter\u00e1 m\u00e1 b\u00fdt aktualizov\u00e1na"
}
}
}
}
@@ -0,0 +1,35 @@
{
"config": {
"abort": {
"single_instance_allowed": "Already configured. Only a single configuration possible.",
"unknown": "Unexpected error"
},
"error": {
"cannot_connect": "Failed to connect",
"invalid_auth": "Invalid authentication",
"invalid_zone": "Invalid zone"
},
"flow_title": "Cloudflare: {name}",
"step": {
"records": {
"data": {
"records": "Records"
},
"title": "Choose the Records to Update"
},
"user": {
"data": {
"api_token": "API Token"
},
"description": "This integration requires an API Token created with Zone:Zone:Read and Zone:DNS:Edit permissions for all zones in your account.",
"title": "Connect to Cloudflare"
},
"zone": {
"data": {
"zone": "Zone"
},
"title": "Choose the Zone to Update"
}
}
}
}
@@ -0,0 +1,34 @@
{
"config": {
"abort": {
"unknown": "Tundmatu viga"
},
"error": {
"cannot_connect": "\u00dchendus nurjus",
"invalid_auth": "Tuvastamise viga",
"invalid_zone": "Sobimatu ala"
},
"flow_title": "Cloudflare: {name}",
"step": {
"records": {
"data": {
"records": "Kirjed"
},
"title": "Vali v\u00e4rskendatavad kirjed"
},
"user": {
"data": {
"api_token": "Api v\u00f5ti"
},
"description": "Selle sidumise jaoks on vaja API tokenit, mis on loodud Zone: Zone: Read ja Zone: DNS: Edit k\u00f5igi oma konto alade \u00f5igusi.!?",
"title": "Loo \u00fchendus Cloudflare'iga"
},
"zone": {
"data": {
"zone": "Ala"
},
"title": "Vali v\u00e4rskendatav ala"
}
}
}
}
@@ -0,0 +1,35 @@
{
"config": {
"abort": {
"single_instance_allowed": "Ju\u017c skonfigurowano. Mo\u017cliwa jest tylko jedna konfiguracja.",
"unknown": "Nieoczekiwany b\u0142\u0105d"
},
"error": {
"cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia",
"invalid_auth": "Niepoprawne uwierzytelnienie",
"invalid_zone": "Nieprawid\u0142owa strefa"
},
"flow_title": "Cloudflare: {name}",
"step": {
"records": {
"data": {
"records": "Rekordy"
},
"title": "Wybierz rekordy do uaktualnienia"
},
"user": {
"data": {
"api_token": "Token API"
},
"description": "Ta integracja wymaga tokena API utworzonego z uprawnieniami \"Zone:Zone:Read\" oraz \"Zone:DNS:Edit\" dla wszystkich stref na Twoim koncie.",
"title": "Po\u0142\u0105czenie z Cloudflare"
},
"zone": {
"data": {
"zone": "Strefa"
},
"title": "Wybierz stref\u0119 do uaktualnienia"
}
}
}
}
@@ -0,0 +1,35 @@
{
"config": {
"abort": {
"single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.",
"unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430."
},
"error": {
"cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f.",
"invalid_auth": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.",
"invalid_zone": "\u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0437\u043e\u043d\u0430"
},
"flow_title": "Cloudflare: {name}",
"step": {
"records": {
"data": {
"records": "\u0417\u0430\u043f\u0438\u0441\u0438"
},
"title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f"
},
"user": {
"data": {
"api_token": "\u0422\u043e\u043a\u0435\u043d API"
},
"description": "\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043a\u0435\u043d API, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 Zone:Zone:Read \u0438 Zone:DNS:Edit \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u043e\u043d \u0432 \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.",
"title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Cloudflare"
},
"zone": {
"data": {
"zone": "\u0417\u043e\u043d\u0430"
},
"title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u043e\u043d\u0443 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f"
}
}
}
}
@@ -1,7 +1,7 @@
{
"state": {
"_": {
"configure": "skonfiguruj",
"configure": "konfiguruj",
"configured": "skonfigurowany"
}
},
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,14 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
},
"step": {
"user": {
"data": {
"off": "\u53ef\u4ee5\u5173\u95ed"
}
}
}
}
}
@@ -1,4 +1,12 @@
{
"device_automation": {
"condition_type": {
"is_closed": "{entity_name} \u5df2\u5173\u95ed"
},
"trigger_type": {
"closed": "{entity_name}\u5df2\u5173\u95ed"
}
},
"state": {
"_": {
"closed": "\u5df2\u5173\u95ed",
@@ -4,9 +4,14 @@
"already_configured": "\u8bbe\u5907\u5df2\u914d\u7f6e\u5b8c\u6210",
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
},
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25",
"invalid_auth": "\u9a8c\u8bc1\u7801\u9519\u8bef"
},
"step": {
"user": {
"data": {
"api_key": "API\u5bc6\u7801",
"host": "\u4e3b\u673a"
},
"description": "\u8f93\u5165\u60a8\u7684 Daikin \u7a7a\u8c03\u7684 IP \u5730\u5740\u3002",
@@ -22,7 +22,8 @@
"side_3": "\u7b2c 3 \u9762",
"side_4": "\u7b2c 4 \u9762",
"side_5": "\u7b2c 5 \u9762",
"side_6": "\u7b2c 6 \u9762"
"side_6": "\u7b2c 6 \u9762",
"turn_off": "\u5173\u95ed"
},
"trigger_type": {
"remote_awakened": "\u8bbe\u5907\u5524\u9192",
@@ -9,7 +9,7 @@ from homeassistant.components.climate import (
ClimateEntity,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PRECISION_HALVES
from homeassistant.const import PRECISION_HALVES, PRECISION_TENTHS
from homeassistant.helpers.typing import HomeAssistantType
from .const import DOMAIN
@@ -60,9 +60,14 @@ class DevoloClimateDeviceEntity(DevoloMultiLevelSwitchDeviceEntity, ClimateEntit
@property
def target_temperature(self) -> Optional[float]:
"""Return the current temperature."""
"""Return the target temperature."""
return self._value
@property
def target_temperature_step(self) -> float:
"""Return the precision of the target temperature."""
return PRECISION_HALVES
@property
def hvac_mode(self) -> str:
"""Return the supported HVAC mode."""
@@ -86,7 +91,7 @@ class DevoloClimateDeviceEntity(DevoloMultiLevelSwitchDeviceEntity, ClimateEntit
@property
def precision(self) -> float:
"""Return the precision of the set temperature."""
return PRECISION_HALVES
return PRECISION_TENTHS
@property
def supported_features(self):
@@ -2,6 +2,7 @@
"config": {
"error": {
"account_error": "\u8ba4\u8bc1\u65e0\u6548",
"cannot_connect": "\u8fde\u63a5\u5931\u8d25",
"session_error": "\u8fde\u63a5\u5931\u8d25",
"unknown": "\u672a\u77e5\u9519\u8bef"
},
@@ -9,7 +10,8 @@
"user": {
"data": {
"password": "\u5bc6\u7801",
"server": "\u670d\u52a1\u5668"
"server": "\u670d\u52a1\u5668",
"username": "\u7528\u6237\u540d"
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,10 @@
{
"config": {
"abort": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
},
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -15,8 +15,8 @@
},
"state": {
"_": {
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony"
"off": "wy\u0142.",
"on": "w\u0142."
}
},
"title": "Wentylator"
@@ -10,7 +10,7 @@
},
"trigger_type": {
"turned_off": "{entity_name} \u88ab\u5173\u95ed",
"turned_on": "{entity_name} \u88ab\u5f00\u542f"
"turned_on": "{entity_name} \u88ab\u6253\u5f00"
}
},
"state": {
+11 -1
View File
@@ -132,7 +132,10 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
elif (
self._temp_sensor_device is None
and "unit" in device.properties
and "value" in device.properties
and (
"value" in device.properties
or "heatingThermostatSetpoint" in device.properties
)
and (device.properties.unit == "C" or device.properties.unit == "F")
):
self._temp_sensor_device = FibaroDevice(device)
@@ -141,6 +144,7 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
if (
"setTargetLevel" in device.actions
or "setThermostatSetpoint" in device.actions
or "setHeatingThermostatSetpoint" in device.actions
):
self._target_temp_device = FibaroDevice(device)
self._support_flags |= SUPPORT_TARGET_TEMPERATURE
@@ -317,6 +321,8 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
"""Return the current temperature."""
if self._temp_sensor_device:
device = self._temp_sensor_device.fibaro_device
if device.properties.heatingThermostatSetpoint:
return float(device.properties.heatingThermostatSetpoint)
return float(device.properties.value)
return None
@@ -325,6 +331,8 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
"""Return the temperature we try to reach."""
if self._target_temp_device:
device = self._target_temp_device.fibaro_device
if device.properties.heatingThermostatSetpointFuture:
return float(device.properties.heatingThermostatSetpointFuture)
return float(device.properties.targetLevel)
return None
@@ -335,5 +343,7 @@ class FibaroThermostat(FibaroDevice, ClimateEntity):
if temperature is not None:
if "setThermostatSetpoint" in target.fibaro_device.actions:
target.action("setThermostatSetpoint", self.fibaro_op_mode, temperature)
elif "setHeatingThermostatSetpoint" in target.fibaro_device.actions:
target.action("setHeatingThermostatSetpoint", temperature)
else:
target.action("setTargetLevel", temperature)
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,19 @@
{
"config": {
"error": {
"auth_failed": "\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef"
},
"step": {
"confirm": {
"data": {
"username": "\u7528\u6237\u540d"
}
},
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -2,7 +2,7 @@
"domain": "frontend",
"name": "Home Assistant Frontend",
"documentation": "https://www.home-assistant.io/integrations/frontend",
"requirements": ["home-assistant-frontend==20201021.1"],
"requirements": ["home-assistant-frontend==20201021.2"],
"dependencies": [
"api",
"auth",
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,3 @@
{
"title": "\u683c\u529b\u7a7a\u8c03"
}
@@ -5,9 +5,9 @@
"home": "w domu",
"locked": "Zablokowane",
"not_home": "poza domem",
"off": "wy\u0142\u0105czony",
"off": "wy\u0142.",
"ok": "ok",
"on": "w\u0142\u0105czony",
"on": "w\u0142.",
"open": "otwarte",
"problem": "problem",
"unlocked": "Odblokowany"
@@ -0,0 +1,7 @@
{
"config": {
"abort": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -2,6 +2,6 @@
"domain": "hikvision",
"name": "Hikvision",
"documentation": "https://www.home-assistant.io/integrations/hikvision",
"requirements": ["pyhik==0.2.7"],
"requirements": ["pyhik==0.2.8"],
"codeowners": ["@mezz64"]
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -18,6 +18,10 @@
"options": {
"step": {
"advanced": {
"data": {
"safe_mode": "Veilige modus (alleen inschakelen als het koppelen mislukt)"
},
"description": "Deze instellingen hoeven alleen te worden aangepast als HomeKit niet functioneert.",
"title": "Geavanceerde configuratie"
},
"exclude": {
@@ -30,9 +34,11 @@
"init": {
"data": {
"include_domains": "Op te nemen domeinen"
}
},
"title": "Selecteer domeinen om zichtbaar te maken."
},
"yaml": {
"description": "Deze invoer wordt beheerd via YAML",
"title": "Pas de HomeKit Bridge-opties aan"
}
}
@@ -6,6 +6,7 @@
"unknown": "Ein unbekannter Fehler ist aufgetreten."
},
"error": {
"invalid_pin": "Ung\u00fcltige PIN, bitte versuche es erneut.",
"invalid_sgtin_or_pin": "Ung\u00fcltige PIN, bitte versuche es erneut.",
"press_the_button": "Bitte dr\u00fccke die blaue Taste.",
"register_failed": "Registrierung fehlgeschlagen, bitte versuche es erneut.",
@@ -0,0 +1,9 @@
{
"config": {
"error": {
"connection_failed": "\u8fde\u63a5\u5931\u8d25",
"incorrect_username": "\u7528\u6237\u540d\u9519\u8bef",
"incorrect_username_or_password": "\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef"
}
}
}
@@ -18,7 +18,7 @@
"data": {
"host": ""
},
"title": "Valige Hue sild"
"title": "Vali Hue sild"
},
"link": {
"description": "Vajutage silla nuppu, et registreerida Philips Hue Home Assistant abil. \n\n ! [Nupu asukoht sillal] (/ static / images / config_philips_hue.jpg)",
@@ -25,5 +25,10 @@
"title": "\u8fde\u63a5\u4e2d\u67a2"
}
}
},
"device_automation": {
"trigger_subtype": {
"turn_off": "\u5173\u95ed"
}
}
}
@@ -20,8 +20,8 @@
},
"state": {
"_": {
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony"
"off": "wy\u0142.",
"on": "w\u0142."
}
},
"title": "Nawil\u017cacz"
@@ -6,6 +6,13 @@
"toggle": "\u5207\u6362 {entity_name} \u5f00\u5173",
"turn_off": "\u5173\u95ed {entity_name}",
"turn_on": "\u6253\u5f00 {entity_name}"
},
"condition_type": {
"is_off": "{entity_name} \u5df2\u5173\u95ed"
},
"trigger_type": {
"turned_off": "{entity_name} \u88ab\u5173\u95ed",
"turned_on": "{entity_name} \u88ab\u6253\u5f00"
}
},
"state": {
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,12 @@
{
"config": {
"error": {
"connection_failure": "\u65e0\u6cd5\u8fde\u63a5\u5230iAqualink\u3002\u68c0\u67e5\u60a8\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002"
},
"step": {
"user": {
"description": "\u8bf7\u8f93\u5165\u60a8\u7684iAqualink\u5e10\u6237\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002"
}
}
}
}
+1 -1
View File
@@ -187,7 +187,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool
icloud_account = hass.data[DOMAIN].get(account_identifier)
if icloud_account is None:
for account in hass.data[DOMAIN].values():
if account.name == account_identifier:
if account.username == account_identifier:
icloud_account = account
if icloud_account is None:
@@ -9,6 +9,11 @@
"validate_verification_code": "\u65e0\u6cd5\u9a8c\u8bc1\u9a8c\u8bc1\u7801\uff0c\u8bf7\u9009\u62e9\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907\u5e76\u91cd\u65b0\u5f00\u59cb\u9a8c\u8bc1"
},
"step": {
"reauth": {
"data": {
"password": "\u5bc6\u7801"
}
},
"trusted_device": {
"data": {
"trusted_device": "\u53d7\u4fe1\u4efb\u7684\u8bbe\u5907"
@@ -18,7 +23,8 @@
},
"user": {
"data": {
"password": "\u5bc6\u7801"
"password": "\u5bc6\u7801",
"username": "\u90ae\u7bb1"
},
"description": "\u8bf7\u8f93\u5165\u51ed\u636e",
"title": "iCloud \u51ed\u636e"
@@ -26,6 +26,7 @@ from homeassistant.const import (
STATE_UNAVAILABLE,
STATE_UNKNOWN,
)
from homeassistant.core import callback
from homeassistant.helpers import event as event_helper, state as state_helper
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity_values import EntityValues
@@ -500,6 +501,7 @@ class InfluxThread(threading.Thread):
self.shutdown = False
hass.bus.listen(EVENT_STATE_CHANGED, self._event_listener)
@callback
def _event_listener(self, event):
"""Listen for new messages on the bus and queue them for Influx."""
item = (time.monotonic(), event)
@@ -1,8 +1,8 @@
{
"state": {
"_": {
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony"
"off": "wy\u0142.",
"on": "w\u0142."
}
},
"title": "Pole warto\u015bci logicznej"
+1 -1
View File
@@ -159,7 +159,7 @@ async def async_setup_entry(hass, entry):
identifiers={(DOMAIN, str(devices.modem.address))},
manufacturer="Smart Home",
name=f"{devices.modem.description} {devices.modem.address}",
model=f"{devices.modem.model} (0x{devices.modem.cat:02x}, 0x{devices.modem.subcat:02x})",
model=f"{devices.modem.model} ({devices.modem.cat!r}, 0x{devices.modem.subcat:02x})",
sw_version=f"{devices.modem.firmware:02x} Engine Version: {devices.modem.engine_version}",
)
@@ -33,6 +33,9 @@
}
},
"options": {
"error": {
"select_single": "W\u00e4hle eine Option aus."
},
"step": {
"add_override": {
"title": "Insteon"
@@ -60,7 +60,8 @@
"already_configured": "Insteoni modemi \u00fchendus on juba seadistatud"
},
"error": {
"cannot_connect": "\u00dchendamine nurjus"
"cannot_connect": "\u00dchendamine nurjus",
"input_error": "Vigane sisestus, kontrolli andmeid"
},
"step": {
"add_override": {
@@ -0,0 +1,16 @@
{
"config": {
"step": {
"hub2": {
"data": {
"username": "\u7528\u6237\u540d"
}
},
"hubv2": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,10 @@
{
"config": {
"abort": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
},
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25"
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -6,12 +6,17 @@
"data": {
"password": "Passwort",
"username": "Benutzername"
}
},
"description": "Bitte gib deinen Kodi-Benutzernamen und Passwort ein. Diese findest du unter System/Einstellungen/Netzwerk/Dienste."
},
"discovery_confirm": {
"description": "M\u00f6chtest du Kodi (` {name} `) zu Home Assistant hinzuf\u00fcgen?"
},
"host": {
"data": {
"host": "Host",
"port": "Port"
"port": "Port",
"ssl": "\u00dcber SSL verbinden"
}
},
"user": {
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"credentials": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -52,7 +52,8 @@
"poll_interval": "Poll interval (minuten) (optioneel)",
"type": "Type sensor"
},
"description": "{zone} opties"
"description": "{zone} opties",
"title": "Configureer digitale sensor"
},
"options_io": {
"data": {
@@ -90,11 +91,13 @@
},
"options_switch": {
"data": {
"momentary": "Pulsduur (ms) (optioneel)",
"more_states": "Aanvullende statussen voor deze zone configureren",
"name": "Naam (optioneel)",
"pause": "Pauze tussen de pulsen (ms) (optioneel)",
"repeat": "Aantal herhalingen (-1=oneindig) (optioneel)"
},
"description": "{zone} opties: status {state}",
"title": "Schakelbare uitgang configureren"
}
}
+2 -2
View File
@@ -89,7 +89,7 @@ class LcnOutputsCover(LcnDevice, CoverEntity):
self._is_opening = False
self._is_closing = True
state = pypck.lcn_defs.MotorStateModifier.DOWN
self.address_connection.control_motors_outputs(state)
self.address_connection.control_motors_outputs(state, self.reverse_time)
self.async_write_ha_state()
async def async_open_cover(self, **kwargs):
@@ -106,7 +106,7 @@ class LcnOutputsCover(LcnDevice, CoverEntity):
self._is_closing = False
self._is_opening = False
state = pypck.lcn_defs.MotorStateModifier.STOP
self.address_connection.control_motors_outputs(state, self.reverse_time)
self.address_connection.control_motors_outputs(state)
self.async_write_ha_state()
def input_received(self, input_obj):
@@ -1,6 +1,10 @@
{
"config": {
"abort": {
"invalid_auth": "\u65e0\u6548\u7684\u8eab\u4efd\u9a8c\u8bc1"
},
"error": {
"invalid_auth": "\u65e0\u6548\u7684\u8eab\u4efd\u9a8c\u8bc1",
"invalid_credentials": "\u65e0\u6548\u7684\u8eab\u4efd\u8ba4\u8bc1",
"invalid_username": "\u65e0\u6548\u7684\u7528\u6237\u540d"
},
@@ -19,8 +19,8 @@
},
"state": {
"_": {
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony"
"off": "wy\u0142.",
"on": "w\u0142."
}
},
"title": "\u015awiat\u0142o"
+4 -1
View File
@@ -21,6 +21,8 @@ DEFAULT_VOICE = "cmu-slt-hsmm"
DEFAULT_CODEC = "WAVE_FILE"
DEFAULT_EFFECTS = {}
MAP_MARYTTS_CODEC = {"WAVE_FILE": "wav", "AIFF_FILE": "aiff", "AU_FILE": "au"}
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
@@ -81,5 +83,6 @@ class MaryTTSProvider(Provider):
effects = options[CONF_EFFECT]
data = self._mary.speak(message, effects)
audiotype = MAP_MARYTTS_CODEC[self._mary.codec]
return self._mary.codec, data
return audiotype, data
@@ -11,8 +11,8 @@
"state": {
"_": {
"idle": "nieaktywny",
"off": "wy\u0142\u0105czony",
"on": "w\u0142\u0105czony",
"off": "wy\u0142.",
"on": "w\u0142.",
"paused": "wstrzymany",
"playing": "odtwarzanie",
"standby": "tryb czuwania"
@@ -4,7 +4,16 @@
"already_configured": "Stadt bereits konfiguriert",
"unknown": "Unbekannter Fehler: Bitte versuchen Sie es sp\u00e4ter erneut"
},
"error": {
"empty": "Kein Ergebnis bei der Stadtsuche: Bitte \u00fcberpr\u00fcfe das Stadtfeld"
},
"step": {
"cities": {
"data": {
"city": "Stadt"
},
"description": "W\u00e4hle deine Stadt aus der Liste"
},
"user": {
"data": {
"city": "Stadt"
@@ -0,0 +1,16 @@
{
"config": {
"error": {
"cannot_connect": "\u8fde\u63a5\u5931\u8d25",
"unknown": "\u672a\u77e5\u9519\u8bef"
},
"step": {
"user": {
"data": {
"latitude": "\u7eac\u5ea6",
"longitude": "\u7ecf\u5ea6"
}
}
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -47,5 +47,14 @@
"button_short_release": "\"{subtype}\" \u91ca\u653e",
"button_triple_press": "\"{subtype}\" \u4e09\u8fde\u51fb"
}
},
"options": {
"step": {
"broker": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
@@ -2,10 +2,12 @@
"config": {
"abort": {
"already_configured": "Seade on juba h\u00e4\u00e4lestatud",
"invalid_auth": "Tuvastamise viga"
"invalid_auth": "Tuvastamise viga",
"invalid_credentials": "Sobimatu mandaat"
},
"error": {
"invalid_auth": "Tuvastamise viga",
"invalid_credentials": "Sobimatu mandaat",
"unexpected_error": "Ootamatu t\u00f5rge",
"unknown": "Ootamatu t\u00f5rge"
},
@@ -0,0 +1,11 @@
{
"config": {
"step": {
"user": {
"data": {
"username": "\u7528\u6237\u540d"
}
}
}
}
}
+7 -3
View File
@@ -30,7 +30,11 @@ from homeassistant.helpers import (
config_entry_oauth2_flow,
config_validation as cv,
)
from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send
from homeassistant.helpers.dispatcher import (
async_dispatcher_connect,
async_dispatcher_send,
dispatcher_send,
)
from homeassistant.helpers.entity import Entity
from . import api, config_flow, local_auth
@@ -176,7 +180,7 @@ class SignalUpdateCallback(EventCallback):
# This event triggered an update to a device that changed some
# properties which the DeviceManager should already have received.
# Send a signal to refresh state of all listening devices.
dispatcher_send(self._hass, SIGNAL_NEST_UPDATE)
async_dispatcher_send(self._hass, SIGNAL_NEST_UPDATE)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
@@ -203,7 +207,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
auth, config[CONF_PROJECT_ID], config[CONF_SUBSCRIBER_ID]
)
subscriber.set_update_callback(SignalUpdateCallback(hass))
hass.loop.create_task(subscriber.start_async())
asyncio.create_task(subscriber.start_async())
hass.data[DOMAIN][entry.entry_id] = subscriber
for component in PLATFORMS:
+7 -3
View File
@@ -61,6 +61,10 @@ class CodeInvalid(NestAuthError):
"""Raised when invalid authorization code."""
class UnexpectedStateError(HomeAssistantError):
"""Raised when the config flow is invoked in a 'should not happen' case."""
@config_entries.HANDLERS.register(DOMAIN)
class NestFlowHandler(
config_entry_oauth2_flow.AbstractOAuth2FlowHandler, domain=DOMAIN
@@ -111,7 +115,7 @@ class NestFlowHandler(
async def async_step_init(self, user_input=None):
"""Handle a flow start."""
if self.is_sdm_api():
return None
raise UnexpectedStateError("Step only supported for legacy API")
flows = self.hass.data.get(DATA_FLOW_IMPL, {})
@@ -142,7 +146,7 @@ class NestFlowHandler(
deliver the authentication code.
"""
if self.is_sdm_api():
return None
raise UnexpectedStateError("Step only supported for legacy API")
flow = self.hass.data[DATA_FLOW_IMPL][self.flow_impl]
@@ -185,7 +189,7 @@ class NestFlowHandler(
async def async_step_import(self, info):
"""Import existing auth from Nest."""
if self.is_sdm_api():
return None
raise UnexpectedStateError("Step only supported for legacy API")
if self.hass.config_entries.async_entries(DOMAIN):
return self.async_abort(reason="single_instance_allowed")
+2 -2
View File
@@ -13,5 +13,5 @@ async def async_setup_entry(
) -> None:
"""Set up the sensors."""
if DATA_SDM not in entry.data:
return await async_setup_legacy_entry(hass, entry, async_add_entities)
return await async_setup_sdm_entry(hass, entry, async_add_entities)
await async_setup_legacy_entry(hass, entry, async_add_entities)
await async_setup_sdm_entry(hass, entry, async_add_entities)
+14 -16
View File
@@ -18,6 +18,13 @@ from homeassistant.helpers.typing import HomeAssistantType
from .const import DOMAIN, SIGNAL_NEST_UPDATE
DEVICE_TYPE_MAP = {
"sdm.devices.types.CAMERA": "Camera",
"sdm.devices.types.DISPLAY": "Display",
"sdm.devices.types.DOORBELL": "Doorbell",
"sdm.devices.types.THERMOSTAT": "Thermostat",
}
async def async_setup_sdm_entry(
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities
@@ -46,7 +53,7 @@ class SensorBase(Entity):
self._device = device
@property
def should_pool(self) -> bool:
def should_poll(self) -> bool:
"""Disable polling since entities have state pushed via pubsub."""
return False
@@ -89,28 +96,19 @@ class SensorBase(Entity):
# The API intentionally returns minimal information about specific
# devices, instead relying on traits, but we can infer a generic model
# name based on the type
if self._device.type == "sdm.devices.types.CAMERA":
return "Camera"
if self._device.type == "sdm.devices.types.DISPLAY":
return "Display"
if self._device.type == "sdm.devices.types.DOORBELL":
return "Doorbell"
if self._device.type == "sdm.devices.types.THERMOSTAT":
return "Thermostat"
return None
return DEVICE_TYPE_MAP.get(self._device.type)
async def async_added_to_hass(self):
"""Run when entity is added to register update signal handler."""
async def async_update_state():
"""Update sensor state."""
await self.async_update_ha_state(True)
# Event messages trigger the SIGNAL_NEST_UPDATE, which is intercepted
# here to re-fresh the signals from _device. Unregister this callback
# when the entity is removed.
self.async_on_remove(
async_dispatcher_connect(self.hass, SIGNAL_NEST_UPDATE, async_update_state)
async_dispatcher_connect(
self.hass,
SIGNAL_NEST_UPDATE,
self.async_write_ha_state,
)
)
@@ -8,6 +8,9 @@
"no_flows": "Necessites configurar Nest abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/nest/).",
"single_instance_allowed": "Ja configurat. Nom\u00e9s \u00e9s possible una sola configuraci\u00f3."
},
"create_entry": {
"default": "Autenticaci\u00f3 exitosa"
},
"error": {
"internal_error": "Error intern al validar el codi",
"invalid_code": "Codi inv\u00e0lid",
@@ -29,6 +32,9 @@
},
"description": "Per enlla\u00e7ar el teu compte de Nest, [autoritza el teu compte]({url}). \n\nDespr\u00e9s de l'autoritzaci\u00f3, copia i enganxa el codi pin que es mostra a sota.",
"title": "Enlla\u00e7 amb el compte de Nest"
},
"pick_implementation": {
"title": "Selecciona el m\u00e8tode d'autenticaci\u00f3"
}
}
}
@@ -8,6 +8,9 @@
"no_flows": "Pot\u0159ebujete nakonfigurovat Nest, abyste se s n\u00edm mohli autentizovat. [P\u0159e\u010dt\u011bte si pros\u00edm pokyny] (https://www.home-assistant.io/components/nest/).",
"single_instance_allowed": "Ji\u017e nastaveno. Je mo\u017en\u00e1 pouze jedin\u00e1 konfigurace."
},
"create_entry": {
"default": "\u00dasp\u011b\u0161n\u011b ov\u011b\u0159eno"
},
"error": {
"internal_error": "Intern\u00ed chyba ov\u011b\u0159en\u00ed k\u00f3du",
"invalid_code": "Neplatn\u00fd k\u00f3d",
@@ -29,6 +32,9 @@
},
"description": "Chcete-li propojit \u00fa\u010det Nest, [autorizujte sv\u016fj \u00fa\u010det]({url}). \n\n Po autorizaci zkop\u00edrujte n\u00ed\u017ee uveden\u00fd k\u00f3d PIN.",
"title": "Propojit s Nest \u00fa\u010dtem"
},
"pick_implementation": {
"title": "Vyberte metodu ov\u011b\u0159en\u00ed"
}
}
}
@@ -8,6 +8,9 @@
"no_flows": "You need to configure Nest before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/components/nest/).",
"single_instance_allowed": "Already configured. Only a single configuration possible."
},
"create_entry": {
"default": "Successfully authenticated"
},
"error": {
"internal_error": "Internal error validating code",
"invalid_code": "Invalid code",
@@ -29,6 +32,9 @@
},
"description": "To link your Nest account, [authorize your account]({url}).\n\nAfter authorization, copy-paste the provided pin code below.",
"title": "Link Nest Account"
},
"pick_implementation": {
"title": "Pick Authentication Method"
}
}
}
@@ -29,6 +29,9 @@
},
"description": "Nest-i konto linkimiseks [authorize your account] ({url}).\n\nP\u00e4rast autoriseerimist kopeeri allolev PIN kood.",
"title": "Lingi Nesti konto"
},
"pick_implementation": {
"title": "Vali tuvastusmeetod"
}
}
}
@@ -8,6 +8,9 @@
"no_flows": "Musisz skonfigurowa\u0107 Nest, aby m\u00f3c si\u0119 z nim uwierzytelni\u0107. Zapoznaj si\u0119 z [instrukcj\u0105](https://www.home-assistant.io/components/nest/).",
"single_instance_allowed": "Ju\u017c skonfigurowano. Mo\u017cliwa jest tylko jedna konfiguracja."
},
"create_entry": {
"default": "Pomy\u015blnie uwierzytelniono"
},
"error": {
"internal_error": "Wewn\u0119trzny b\u0142\u0105d sprawdzania poprawno\u015bci kodu",
"invalid_code": "Nieprawid\u0142owy kod",
@@ -29,6 +32,9 @@
},
"description": "Aby po\u0142\u0105czy\u0107 z kontem Nest, [wykonaj autoryzacj\u0119]({url}). \n\n Po autoryzacji skopiuj i wklej podany kod PIN poni\u017cej.",
"title": "Po\u0142\u0105czenie z kontem Nest"
},
"pick_implementation": {
"title": "Wybierz metod\u0119 uwierzytelniania"
}
}
}
@@ -8,6 +8,9 @@
"no_flows": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Nest \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438](https://www.home-assistant.io/components/nest/).",
"single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e."
},
"create_entry": {
"default": "\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e."
},
"error": {
"internal_error": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430.",
"invalid_code": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.",
@@ -29,6 +32,9 @@
},
"description": "[\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0439\u0442\u0435\u0441\u044c]({url}), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Nest. \n\n \u041f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043f\u0438\u043d-\u043a\u043e\u0434.",
"title": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c Nest"
},
"pick_implementation": {
"title": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438"
}
}
}
@@ -9,6 +9,7 @@
"error": {
"internal_error": "\u9a8c\u8bc1\u4ee3\u7801\u65f6\u53d1\u751f\u5185\u90e8\u9519\u8bef",
"invalid_code": "\u9a8c\u8bc1\u7801\u65e0\u6548",
"invalid_pin": "PIN\u7801\u65e0\u6548",
"timeout": "\u9a8c\u8bc1\u7801\u8d85\u65f6",
"unknown": "\u9a8c\u8bc1\u7801\u672a\u77e5\u9519\u8bef"
},
@@ -8,6 +8,9 @@
"no_flows": "\u5fc5\u9808\u5148\u8a2d\u5b9a Nest \u65b9\u80fd\u9032\u884c\u8a8d\u8b49\u3002[\u8acb\u53c3\u95b1\u6559\u5b78\u6307\u5f15](https://www.home-assistant.io/components/nest/)\u3002",
"single_instance_allowed": "\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44\u8a2d\u5099\u3002"
},
"create_entry": {
"default": "\u5df2\u6210\u529f\u8a8d\u8b49"
},
"error": {
"internal_error": "\u8a8d\u8b49\u78bc\u5167\u90e8\u932f\u8aa4",
"invalid_code": "\u8a8d\u8b49\u78bc\u7121\u6548",
@@ -29,6 +32,9 @@
},
"description": "\u6b32\u9023\u7d50 Nest \u5e33\u865f\uff0c[\u8a8d\u8b49\u5e33\u865f]({url}).\n\n\u65bc\u8a8d\u8b49\u5f8c\uff0c\u8907\u88fd\u4e26\u8cbc\u4e0a\u4e0b\u65b9\u7684\u8a8d\u8b49\u78bc\u3002",
"title": "\u9023\u7d50 Nest \u5e33\u865f"
},
"pick_implementation": {
"title": "\u9078\u64c7\u9a57\u8b49\u6a21\u5f0f"
}
}
}
+41 -21
View File
@@ -48,39 +48,53 @@ SUPPORTED_PUBLIC_SENSOR_TYPES = [
]
SENSOR_TYPES = {
"temperature": ["Temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE],
"temp_trend": ["Temperature trend", None, "mdi:trending-up", None],
"co2": ["CO2", CONCENTRATION_PARTS_PER_MILLION, "mdi:molecule-co2", None],
"pressure": ["Pressure", PRESSURE_MBAR, None, DEVICE_CLASS_PRESSURE],
"pressure_trend": ["Pressure trend", None, "mdi:trending-up", None],
"noise": ["Noise", "dB", "mdi:volume-high", None],
"humidity": ["Humidity", PERCENTAGE, None, DEVICE_CLASS_HUMIDITY],
"rain": ["Rain", LENGTH_MILLIMETERS, "mdi:weather-rainy", None],
"sum_rain_1": ["Rain last hour", LENGTH_MILLIMETERS, "mdi:weather-rainy", None],
"sum_rain_24": ["Rain today", LENGTH_MILLIMETERS, "mdi:weather-rainy", None],
"battery_percent": ["Battery Percent", PERCENTAGE, None, DEVICE_CLASS_BATTERY],
"windangle": ["Direction", None, "mdi:compass-outline", None],
"windangle_value": ["Angle", DEGREE, "mdi:compass-outline", None],
"temperature": ["Temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE, True],
"temp_trend": ["Temperature trend", None, "mdi:trending-up", None, False],
"co2": ["CO2", CONCENTRATION_PARTS_PER_MILLION, "mdi:molecule-co2", None, True],
"pressure": ["Pressure", PRESSURE_MBAR, None, DEVICE_CLASS_PRESSURE, True],
"pressure_trend": ["Pressure trend", None, "mdi:trending-up", None, False],
"noise": ["Noise", "dB", "mdi:volume-high", None, True],
"humidity": ["Humidity", PERCENTAGE, None, DEVICE_CLASS_HUMIDITY, True],
"rain": ["Rain", LENGTH_MILLIMETERS, "mdi:weather-rainy", None, True],
"sum_rain_1": [
"Rain last hour",
LENGTH_MILLIMETERS,
"mdi:weather-rainy",
None,
False,
],
"sum_rain_24": ["Rain today", LENGTH_MILLIMETERS, "mdi:weather-rainy", None, True],
"battery_percent": [
"Battery Percent",
PERCENTAGE,
None,
DEVICE_CLASS_BATTERY,
True,
],
"windangle": ["Direction", None, "mdi:compass-outline", None, True],
"windangle_value": ["Angle", DEGREE, "mdi:compass-outline", None, False],
"windstrength": [
"Wind Strength",
SPEED_KILOMETERS_PER_HOUR,
"mdi:weather-windy",
None,
True,
],
"gustangle": ["Gust Direction", None, "mdi:compass-outline", None],
"gustangle_value": ["Gust Angle", DEGREE, "mdi:compass-outline", None],
"gustangle": ["Gust Direction", None, "mdi:compass-outline", None, False],
"gustangle_value": ["Gust Angle", DEGREE, "mdi:compass-outline", None, False],
"guststrength": [
"Gust Strength",
SPEED_KILOMETERS_PER_HOUR,
"mdi:weather-windy",
None,
False,
],
"reachable": ["Reachability", None, "mdi:signal", None],
"rf_status": ["Radio", None, "mdi:signal", None],
"rf_status_lvl": ["Radio Level", "", None, DEVICE_CLASS_SIGNAL_STRENGTH],
"wifi_status": ["Wifi", None, "mdi:wifi", None],
"wifi_status_lvl": ["Wifi Level", "dBm", None, DEVICE_CLASS_SIGNAL_STRENGTH],
"health_idx": ["Health", None, "mdi:cloud", None],
"reachable": ["Reachability", None, "mdi:signal", None, False],
"rf_status": ["Radio", None, "mdi:signal", None, False],
"rf_status_lvl": ["Radio Level", "", None, DEVICE_CLASS_SIGNAL_STRENGTH, False],
"wifi_status": ["Wifi", None, "mdi:wifi", None, False],
"wifi_status_lvl": ["Wifi Level", "dBm", None, DEVICE_CLASS_SIGNAL_STRENGTH, False],
"health_idx": ["Health", None, "mdi:cloud", None, True],
}
MODULE_TYPE_OUTDOOR = "NAModule1"
@@ -257,6 +271,7 @@ class NetatmoSensor(NetatmoBase):
self._unit_of_measurement = SENSOR_TYPES[self.type][1]
self._model = device["type"]
self._unique_id = f"{self._id}-{self.type}"
self._enabled_default = SENSOR_TYPES[self.type][4]
@property
def icon(self):
@@ -283,6 +298,11 @@ class NetatmoSensor(NetatmoBase):
"""Return entity availability."""
return self._state is not None
@property
def entity_registry_enabled_default(self) -> bool:
"""Return if the entity should be enabled when first added to the entity registry."""
return self._enabled_default
@callback
def async_update_callback(self):
"""Update the entity's state."""

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