Merge pull request #3757 from home-assistant/dev

20190918.1
This commit is contained in:
Paulus Schoutsen 2019-09-18 13:02:58 -07:00 committed by GitHub
commit e7ac95e314
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 265 additions and 117 deletions

View File

@ -137,14 +137,14 @@ export class HcMain extends HassElement {
}),
});
} catch (err) {
this._error = err;
this._error = this._getErrorMessage(err);
return;
}
let connection;
try {
connection = await createConnection({ auth });
} catch (err) {
this._error = err;
this._error = this._getErrorMessage(err);
return;
}
if (this.hass) {
@ -213,6 +213,23 @@ export class HcMain extends HassElement {
});
}
private _getErrorMessage(error: number): string {
switch (error) {
case 1:
return "Unable to connect to the Home Assistant websocket API.";
case 2:
return "The supplied authentication is invalid.";
case 3:
return "The connection to Home Assistant was lost.";
case 4:
return "Missing hassUrl. This is required.";
case 5:
return "Home Assistant needs to be served over https:// to use with Home Assistant Cast.";
default:
return "Unknown Error";
}
}
private _breakFree() {
const controls = document.body.querySelector("touch-controls");
if (controls) {

View File

@ -115,10 +115,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
attributes: {
friendly_name: "Abode Updates",
icon: "hademo:security",
templates: {
icon_color:
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
},
},
},
"input_boolean.tv": {
@ -127,10 +123,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
attributes: {
friendly_name: "TV",
icon: "hademo:television",
templates: {
icon_color:
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
},
},
},
"input_boolean.homeautomation": {
@ -139,10 +131,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
attributes: {
friendly_name: "Home Automation",
icon: "hass:home-automation",
templates: {
icon_color:
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
},
},
},
"input_boolean.tvtime": {
@ -151,12 +139,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
attributes: {
friendly_name: "TV Time",
icon: "hademo:television-guide",
templates: {
icon:
"if (state === 'on') return 'hademo:television-classic'; return 'hademo:television-classic-off';\n",
icon_color:
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
},
},
},
"input_select.livingroomharmony": {
@ -560,12 +542,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
state: "off",
attributes: {
friendly_name: "Driveway Light",
templates: {
icon_color:
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
icon:
"if (state === 'on') return 'hademo:lightbulb-on'; return 'hademo:lightbulb';\n",
},
},
},
"switch.wemoporch": {
@ -573,12 +549,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
state: "off",
attributes: {
friendly_name: "Porch Lights",
templates: {
icon_color:
"if (state === 'on') return 'rgb(251, 210, 41)'; return 'rgb(54, 95, 140)';\n",
icon:
"if (state === 'on') return 'hademo:lightbulb-on'; return 'hademo:lightbulb';\n",
},
},
},
});

View File

@ -23,7 +23,7 @@
"@material/mwc-checkbox": "^0.8.0",
"@material/mwc-fab": "^0.8.0",
"@material/mwc-ripple": "0.8.0",
"@mdi/svg": "4.3.95",
"@mdi/svg": "4.4.95",
"@polymer/app-layout": "^3.0.2",
"@polymer/app-localize-behavior": "^3.0.1",
"@polymer/app-route": "^3.0.2",

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="home-assistant-frontend",
version="20190918.0",
version="20190918.1",
description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors",

View File

@ -36,6 +36,7 @@ class MoreInfoSettings extends LocalizeMixin(EventsMixin(PolymerElement)) {
app-toolbar mwc-button {
font-size: 0.8em;
margin: 0;
--mdc-theme-primary: var(--more-info-header-color);
}
.form {

View File

@ -35,6 +35,8 @@ import { EntityRegistryEntry } from "../../../data/entity_registry";
import { ConfigEntry } from "../../../data/config_entries";
import { AreaRegistryEntry } from "../../../data/area_registry";
import { navigate } from "../../../common/navigate";
import { LocalizeFunc } from "../../../common/translations/localize";
import computeStateName from "../../../common/entity/compute_state_name";
interface DeviceRowData extends DeviceRegistryEntry {
device?: DeviceRowData;
@ -43,6 +45,10 @@ interface DeviceRowData extends DeviceRegistryEntry {
battery_entity?: string;
}
interface DeviceEntityLookup {
[deviceId: string]: EntityRegistryEntry[];
}
@customElement("ha-config-devices-dashboard")
export class HaConfigDeviceDashboard extends LitElement {
@property() public hass!: HomeAssistant;
@ -59,37 +65,73 @@ export class HaConfigDeviceDashboard extends LitElement {
entries: ConfigEntry[],
entities: EntityRegistryEntry[],
areas: AreaRegistryEntry[],
domain: string
domain: string,
localize: LocalizeFunc
) => {
// Some older installations might have devices pointing at invalid entryIDs
// So we guard for that.
let outputDevices: DeviceRowData[] = devices;
const deviceLookup: { [deviceId: string]: DeviceRegistryEntry } = {};
for (const device of devices) {
deviceLookup[device.id] = device;
}
const deviceEntityLookup: DeviceEntityLookup = {};
for (const entity of entities) {
if (!entity.device_id) {
continue;
}
if (!(entity.device_id in deviceEntityLookup)) {
deviceEntityLookup[entity.device_id] = [];
}
deviceEntityLookup[entity.device_id].push(entity);
}
const entryLookup: { [entryId: string]: ConfigEntry } = {};
for (const entry of entries) {
entryLookup[entry.entry_id] = entry;
}
const areaLookup: { [areaId: string]: AreaRegistryEntry } = {};
for (const area of areas) {
areaLookup[area.area_id] = area;
}
if (domain) {
outputDevices = outputDevices.filter(
(device) =>
entries.find((entry) =>
device.config_entries.includes(entry.entry_id)
)!.domain === domain
outputDevices = outputDevices.filter((device) =>
device.config_entries.find(
(entryId) =>
entryId in entryLookup && entryLookup[entryId].domain === domain
)
);
}
outputDevices = outputDevices.map((device) => {
const output = { ...device };
output.name = device.name_by_user || device.name || "No name";
output.area =
!areas || !device || !device.area_id
? "No area"
: areas.find((area) => area.area_id === device.area_id)!.name;
output.integration =
!entries || !device || !device.config_entries
? "No integration"
: entries.find((entry) =>
device.config_entries.includes(entry.entry_id)
)!.domain;
output.battery_entity = this._batteryEntity(device, entities);
return output;
return {
...device,
name:
device.name_by_user ||
device.name ||
this._fallbackDeviceName(device.id, deviceEntityLookup) ||
"No name",
model: device.model || "<unknown>",
manufacturer: device.manufacturer || "<unknown>",
area: device.area_id ? areaLookup[device.area_id].name : "No area",
integration: device.config_entries.length
? device.config_entries
.filter((entId) => entId in entryLookup)
.map(
(entId) =>
localize(
`component.${entryLookup[entId].domain}.config.title`
) || entryLookup[entId].domain
)
.join(", ")
: "No integration",
battery_entity: this._batteryEntity(device.id, deviceEntityLookup),
};
});
return outputDevices;
@ -171,7 +213,7 @@ export class HaConfigDeviceDashboard extends LitElement {
></ha-state-icon>
`
: html`
n/a
-
`;
},
},
@ -190,7 +232,8 @@ export class HaConfigDeviceDashboard extends LitElement {
this.entries,
this.entities,
this.areas,
this.domain
this.domain,
this.hass.localize
).map((device: DeviceRowData) => {
// We don't need a lot of this data for mobile view, but kept it for filtering...
const data: DataTabelRowData = {
@ -214,10 +257,12 @@ export class HaConfigDeviceDashboard extends LitElement {
`;
}
private _batteryEntity(device, entities): string | undefined {
const batteryEntity = entities.find(
private _batteryEntity(
deviceId: string,
deviceEntityLookup: DeviceEntityLookup
): string | undefined {
const batteryEntity = (deviceEntityLookup[deviceId] || []).find(
(entity) =>
entity.device_id === device.id &&
this.hass.states[entity.entity_id] &&
this.hass.states[entity.entity_id].attributes.device_class === "battery"
);
@ -225,6 +270,20 @@ export class HaConfigDeviceDashboard extends LitElement {
return batteryEntity ? batteryEntity.entity_id : undefined;
}
private _fallbackDeviceName(
deviceId: string,
deviceEntityLookup: DeviceEntityLookup
): string | undefined {
for (const entity of deviceEntityLookup[deviceId] || []) {
const stateObj = this.hass.states[entity.entity_id];
if (stateObj) {
return computeStateName(stateObj);
}
}
return undefined;
}
private _handleRowClicked(ev: CustomEvent) {
const deviceId = (ev.detail as RowClickedEvent).id;
navigate(this, `/config/devices/device/${deviceId}`);

View File

@ -34,6 +34,7 @@ class HaConfigDevices extends HassRouterPage {
routes: {
dashboard: {
tag: "ha-config-devices-dashboard",
cache: true,
},
device: {
tag: "ha-config-device-page",
@ -41,10 +42,10 @@ class HaConfigDevices extends HassRouterPage {
},
};
@property() private _configEntries?: ConfigEntry[];
@property() private _entityRegistryEntries?: EntityRegistryEntry[];
@property() private _deviceRegistryEntries?: DeviceRegistryEntry[];
@property() private _areas?: AreaRegistryEntry[];
@property() private _configEntries: ConfigEntry[] = [];
@property() private _entityRegistryEntries: EntityRegistryEntry[] = [];
@property() private _deviceRegistryEntries: DeviceRegistryEntry[] = [];
@property() private _areas: AreaRegistryEntry[] = [];
private _unsubs?: UnsubscribeFunc[];

View File

@ -37,25 +37,24 @@ import { HomeAssistant } from "../../../types";
import { ConfigEntry } from "../../../data/config_entries";
import { fireEvent } from "../../../common/dom/fire_event";
import { EntityRegistryEntry } from "../../../data/entity_registry";
import { DataEntryFlowProgress } from "../../../data/data_entry_flow";
@customElement("ha-config-entries-dashboard")
export class HaConfigManagerDashboard extends LitElement {
@property() public hass!: HomeAssistant;
@property() public isWide = false;
@property() private entries = [];
@property() private configEntries!: ConfigEntry[];
/**
* Entity Registry entries.
*/
@property() private entities: EntityRegistryEntry[] = [];
@property() private entityRegistryEntries!: EntityRegistryEntry[];
/**
* Current flows that are in progress and have not been started by a user.
* For example, can be discovered devices that require more config.
*/
@property() private progress = [];
@property() private configEntriesInProgress!: DataEntryFlowProgress[];
public connectedCallback() {
super.connectedCallback();
@ -67,7 +66,7 @@ export class HaConfigManagerDashboard extends LitElement {
<hass-subpage
header=${this.hass.localize("ui.panel.config.integrations.caption")}
>
${this.progress.length
${this.configEntriesInProgress.length
? html`
<ha-config-section>
<span slot="header"
@ -76,7 +75,7 @@ export class HaConfigManagerDashboard extends LitElement {
)}</span
>
<ha-card>
${this.progress.map(
${this.configEntriesInProgress.map(
(flow) => html`
<div class="config-entry-row">
<paper-item-body>
@ -102,8 +101,8 @@ export class HaConfigManagerDashboard extends LitElement {
)}</span
>
<ha-card>
${this.entities.length
? this.entries.map(
${this.entityRegistryEntries.length
? this.configEntries.map(
(item: any, idx) => html`
<a
href="/config/integrations/config_entry/${item.entry_id}"
@ -155,7 +154,6 @@ export class HaConfigManagerDashboard extends LitElement {
title=${this.hass.localize("ui.panel.config.integrations.new")}
@click=${this._createFlow}
?rtl=${computeRTL(this.hass!)}
?isWide=${this.isWide}
></ha-fab>
</hass-subpage>
`;
@ -175,11 +173,11 @@ export class HaConfigManagerDashboard extends LitElement {
}
private _getEntities(configEntry: ConfigEntry): HassEntity[] {
if (!this.entities) {
if (!this.entityRegistryEntries) {
return [];
}
const states: HassEntity[] = [];
this.entities.forEach((entity) => {
this.entityRegistryEntries.forEach((entity) => {
if (
entity.config_entry_id === configEntry.entry_id &&
entity.entity_id in this.hass.states
@ -217,21 +215,10 @@ export class HaConfigManagerDashboard extends LitElement {
z-index: 1;
}
ha-fab[is-wide] {
bottom: 24px;
right: 24px;
}
ha-fab[rtl] {
right: auto;
left: 16px;
}
ha-fab[rtl][is-wide] {
bottom: 24px;
right: auto;
left: 24px;
}
`;
}
}

View File

@ -1,4 +1,5 @@
import "@polymer/app-route/app-route";
import { property, customElement, PropertyValues } from "lit-element";
import "./ha-config-entries-dashboard";
import "./config-entry/ha-config-entry-page";
@ -11,7 +12,6 @@ import {
HassRouterPage,
RouterOptions,
} from "../../../layouts/hass-router-page";
import { property, customElement, PropertyValues } from "lit-element";
import { HomeAssistant } from "../../../types";
import { ConfigEntry, getConfigEntries } from "../../../data/config_entries";
import {
@ -42,7 +42,6 @@ class HaConfigIntegrations extends HassRouterPage {
protected routerOptions: RouterOptions = {
defaultPage: "dashboard",
preloadAll: true,
routes: {
dashboard: {
tag: "ha-config-entries-dashboard",
@ -53,11 +52,11 @@ class HaConfigIntegrations extends HassRouterPage {
},
};
@property() private _configEntries?: ConfigEntry[];
@property() private _configEntriesInProgress?: DataEntryFlowProgress[];
@property() private _entityRegistryEntries?: EntityRegistryEntry[];
@property() private _deviceRegistryEntries?: DeviceRegistryEntry[];
@property() private _areas?: AreaRegistryEntry[];
@property() private _configEntries: ConfigEntry[] = [];
@property() private _configEntriesInProgress: DataEntryFlowProgress[] = [];
@property() private _entityRegistryEntries: EntityRegistryEntry[] = [];
@property() private _deviceRegistryEntries: DeviceRegistryEntry[] = [];
@property() private _areas: AreaRegistryEntry[] = [];
private _unsubs?: UnsubscribeFunc[];
@ -98,15 +97,14 @@ class HaConfigIntegrations extends HassRouterPage {
protected updatePageEl(pageEl) {
pageEl.hass = this.hass;
pageEl.entityRegistryEntries = this._entityRegistryEntries;
pageEl.configEntries = this._configEntries;
if (this._currentPage === "dashboard") {
pageEl.entities = this._entityRegistryEntries;
pageEl.entries = this._configEntries;
pageEl.progress = this._configEntriesInProgress;
pageEl.configEntriesInProgress = this._configEntriesInProgress;
return;
}
pageEl.entityRegistryEntries = this._entityRegistryEntries;
pageEl.configEntries = this._configEntries;
pageEl.configEntryId = this.routeTail.path.substr(1);
pageEl.deviceRegistryEntries = this._deviceRegistryEntries;
pageEl.areas = this._areas;

View File

@ -39,7 +39,7 @@ export class HuiUnavailable extends LitElement {
position: absolute;
top: 50%;
left: 50%;
font-size: 50px;
font-size: 24px;
color: var(--primary-text-color);
transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);

View File

@ -681,7 +681,7 @@
},
"integrations": {
"caption": "Integracions",
"description": "Gestiona dispositius i serveis connectats",
"description": "Gestiona i configura la integració",
"discovered": "Descobertes",
"configured": "Configurades",
"new": "Configura una nova integració",
@ -805,6 +805,10 @@
"confirm_stop": "Segur que vols aturar Home Assistant?"
}
}
},
"devices": {
"caption": "Dispositius",
"description": "Gestiona els dispositius connectats"
}
},
"profile": {

View File

@ -681,7 +681,7 @@
},
"integrations": {
"caption": "Integrations",
"description": "Manage connected devices and services",
"description": "Manage and setup integrations",
"discovered": "Discovered",
"configured": "Configured",
"new": "Set up a new integration",
@ -805,6 +805,10 @@
"confirm_stop": "Are you sure you want to stop Home Assistant?"
}
}
},
"devices": {
"caption": "Devices",
"description": "Manage connected devices"
}
},
"profile": {

View File

@ -805,6 +805,10 @@
"confirm_stop": "¿Seguro que quieres detener Home Assistant?"
}
}
},
"devices": {
"caption": "Dispositivos",
"description": "Administrar dispositivos conectados"
}
},
"profile": {

View File

@ -1301,6 +1301,11 @@
},
"config_entry_system_options": {
"title": "אפשרויות מערכת"
},
"zha_device_info": {
"services": {
"remove": "הסר מכשיר מרשת ה-ZigBee"
}
}
},
"auth_store": {

View File

@ -681,7 +681,7 @@
},
"integrations": {
"caption": "통합 구성요소",
"description": "연결된 기기 및 서비스를 관리합니다",
"description": "통합 구성요소를 관리하고 설정합니다",
"discovered": "발견된 구성요소",
"configured": "설정된 구성요소",
"new": "새로운 통합 구성요소 설정",
@ -805,6 +805,10 @@
"confirm_stop": "Home Assistant 를 중지 하시겠습니까?"
}
}
},
"devices": {
"caption": "기기",
"description": "연결된 기기 관리"
}
},
"profile": {

View File

@ -805,6 +805,10 @@
"confirm_stop": "Sécher fir Home Assistant ze stoppen?"
}
}
},
"devices": {
"caption": "Apparater",
"description": "Verwalt verbonnen Apparater"
}
},
"profile": {

View File

@ -681,7 +681,7 @@
},
"integrations": {
"caption": "Integraties",
"description": "Beheer verbonden apparaten en services",
"description": "Beheer en installeer integraties",
"discovered": "Ontdekt",
"configured": "Geconfigureerd",
"new": "Stel een nieuwe integratie in",
@ -805,6 +805,10 @@
"confirm_stop": "Weet je zeker dat je Home Assistant wilt afsluiten?"
}
}
},
"devices": {
"caption": "Apparaten",
"description": "Beheer verbonden apparaten"
}
},
"profile": {

View File

@ -544,6 +544,9 @@
"label": "Zone",
"entity": "Entitate cu localizare",
"zone": "Zone"
},
"device": {
"label": "Dispozitiv"
}
},
"learn_more": "Aflați mai multe despre condiții"
@ -578,6 +581,9 @@
"label": "Eveniment declansare",
"event": "Eveniment",
"service_data": "Date serviciu"
},
"device_id": {
"label": "Dispozitiv"
}
},
"learn_more": "Aflați mai multe despre acțiuni"
@ -626,6 +632,8 @@
"header": "Valoare nod"
},
"node_config": {
"true": "Adevărat",
"false": "Fals",
"set_config_parameter": "Setați parametrul de configurare"
}
},
@ -738,7 +746,9 @@
"unavailable": "Această entitate nu este disponibilă momentan.",
"default_name": "Zonă nouă",
"delete": "ȘTERGE",
"update": "ACTUALIZAȚI"
"update": "ACTUALIZAȚI",
"enabled_label": "Activează entitatea",
"enabled_description": "Entitățile dezactivate nu vof fi adăugate in Home Assistant"
}
},
"person": {
@ -750,6 +760,26 @@
"device_tracker_picked": "Urmăriți dispozitivul",
"device_tracker_pick": "Alegeți dispozitivul pentru a urmări"
}
},
"server_control": {
"caption": "Control server",
"description": "Repornește si oprește serverul Home Assistant",
"section": {
"validation": {
"heading": "Validare configurație",
"introduction": "Validați configurația dvs. dacă ați făcut recent unele modificări și doriți să vă asigurați că aceasta este validă",
"check_config": "Verificați configurația",
"valid": "Configurația este validă!",
"invalid": "Configurația este invalidă"
},
"reloading": {
"heading": "Reîncărcarea configurației",
"core": "Reîncărcați nucleul",
"group": "Reîncărcați grupurile",
"automation": "Reîncarcă automatizările",
"script": "Reîncărcați script-uri"
}
}
}
},
"profile": {
@ -1090,7 +1120,7 @@
"week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}",
"second": "{count} {count, plural,\none {secunda}\nother {secunde}\n}",
"minute": "{count} {count, plural,\n one { minut }\n other { minute }\n}",
"hour": "{count}{count, plural,\n one { zi }\n other { zile }\n}"
"hour": "{count}{count, plural,\n one { ora }\n other { ore }\n}"
},
"login-form": {
"password": "Parola",
@ -1159,7 +1189,8 @@
"fan": {
"speed": "Viteză",
"oscillate": "Oscilare",
"direction": "Direcţie"
"direction": "Direcţie",
"forward": "Înainte"
},
"light": {
"brightness": "Luminozitate",
@ -1204,6 +1235,11 @@
"target_temperature": "Temperatura țintă",
"operation": "Operație",
"away_mode": "Plecat"
},
"timer": {
"actions": {
"finish": "Termina"
}
}
},
"components": {
@ -1222,7 +1258,7 @@
"duration": {
"second": "{count} {count, plural,\none {secunda}\nother {secunde}\n}",
"minute": "{count} {count, plural,\n one { minut }\n other { minute }\n}",
"hour": "{count}{count, plural,\n one { zi }\n other { zile }\n}",
"hour": "{count}{count, plural,\n one { ora }\n other { ore }\n}",
"day": "{count}{count, plural,\n one { zi }\n other { zile }\n}",
"week": "{count}{count, plural,\n one { săptămână }\n other { săptămâni }\n}"
}
@ -1257,6 +1293,31 @@
"updater": {
"title": "Actualizați instrucțiunile"
}
},
"options_flow": {
"form": {
"header": "Opțiuni"
},
"success": {
"description": "Opțiunile salvate cu succes."
}
},
"config_entry_system_options": {
"title": "Setări de sistem",
"enable_new_entities_label": "Activează entitățile nou adăugate"
},
"zha_device_info": {
"manuf": "de {producator}",
"no_area": "Nici o zonă",
"services": {
"updateDeviceName": "Setați un nume personalizat pentru acest dispozitiv în registrul de dispozitive.",
"remove": "Eliminați un dispozitiv din rețeaua ZigBee."
},
"zha_device_card": {
"device_name_placeholder": "Nume dat de utilizator",
"area_picker_label": "Zonă",
"update_name_button": "Actualizați numele"
}
}
},
"auth_store": {
@ -1352,5 +1413,10 @@
"system-admin": "Administratori",
"system-users": "Utilizatori",
"system-read-only": "Utilizatori cu drepturi de citire"
},
"config_entry": {
"disabled_by": {
"user": "Utilizator"
}
}
}

View File

@ -681,7 +681,7 @@
},
"integrations": {
"caption": "Интеграции",
"description": "Управляйте подключенными устройствами и службами",
"description": "Добавляйте и настраивайте интеграции",
"discovered": "Обнаружено",
"configured": "Настроено",
"new": "Интеграции",
@ -805,6 +805,10 @@
"confirm_stop": "Вы уверены, что хотите остановить Home Assistant?"
}
}
},
"devices": {
"caption": "Устройства",
"description": "Управляйте подключенными устройствами"
}
},
"profile": {

View File

@ -348,7 +348,7 @@
"description": "Skontrolujte Váš konfiguračný súbor a ovládajte server",
"section": {
"core": {
"header": "Konfigurácia a ovládanie servera",
"header": "Všeobecná konfigurácia",
"introduction": "Zmena konfigurácie môže byť ťažkým procesom. My vieme. Táto sekcia sa Vám pokúsi zjednodušiť život.",
"core_config": {
"edit_requires_storage": "Editor je zablokovaný, pretože konfigurácia je uložená v configuration.yaml",
@ -540,6 +540,9 @@
"label": "Zóna",
"entity": "Entita s umiestnením",
"zone": "Zóna"
},
"device": {
"label": "Zariadenie"
}
},
"learn_more": "Získajte viac informácií o podmienkach"
@ -574,6 +577,9 @@
"label": "Odpáliť udalosť",
"event": "Udalosť:",
"service_data": "Dáta služby"
},
"device_id": {
"label": "Zariadenie"
}
},
"learn_more": "Získajte viac informácií o akciách"
@ -1006,6 +1012,10 @@
"save": "Uložiť",
"unsaved_changes": "Neuložené zmeny",
"saved": "Uložené"
},
"edit_lovelace": {
"header": "Názov vášho Lovelace UI",
"explanation": "Tento názov sa zobrazuje nad všetkými vašimi zobrazeniami v Lovelace."
}
},
"menu": {
@ -1249,6 +1259,12 @@
"updater": {
"title": "Pokyny pre aktualizáciu"
}
},
"zha_device_info": {
"zha_device_card": {
"area_picker_label": "Oblasť",
"update_name_button": "Aktualizovať názov"
}
}
},
"auth_store": {

View File

@ -699,10 +699,10 @@
dependencies:
"@material/feature-targeting" "^3.1.0"
"@mdi/svg@4.3.95":
version "4.3.95"
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-4.3.95.tgz#f2121132baab9e8953ee7ef71834cbe2f03065bb"
integrity sha512-RRda3q+270vhiL0Nt7oyeGX03zndEzkGJQJSz8dny1Yjwx2iVRUz51Xop6PTBPaEH4csa3sRkFY3q2PeIa2fKg==
"@mdi/svg@4.4.95":
version "4.4.95"
resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-4.4.95.tgz#0af47ecd777deb75bd2e1514afa52cfbd81ac262"
integrity sha512-ttQWCXZE8tAvqzFh4vijuuBJNbF2VsGB61rny5MAytWorqf0LKd3XyCrFxODi3uo/BH3Skb+7iXYav3E/9+sIw==
"@polymer/app-layout@^3.0.2":
version "3.0.2"