From 493198f53014613147613f44f9da9cc45dd09b22 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Thu, 12 Sep 2019 13:38:18 -0500 Subject: [PATCH 01/21] Set minimum brightness of slider to 1% Closes #3693 --- src/panels/lovelace/cards/hui-light-card.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/panels/lovelace/cards/hui-light-card.ts b/src/panels/lovelace/cards/hui-light-card.ts index 71480dd5f2..a1efbf274c 100644 --- a/src/panels/lovelace/cards/hui-light-card.ts +++ b/src/panels/lovelace/cards/hui-light-card.ts @@ -97,6 +97,7 @@ export class HuiLightCard extends LitElement implements LovelaceCard { ${supportsFeature(stateObj, SUPPORT_BRIGHTNESS) ? html` Date: Fri, 13 Sep 2019 22:58:43 +0200 Subject: [PATCH 02/21] Add min/max changes on thermostat update --- src/panels/lovelace/cards/hui-thermostat-card.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/panels/lovelace/cards/hui-thermostat-card.ts b/src/panels/lovelace/cards/hui-thermostat-card.ts index 0070de8d0d..5ec56a3d5a 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -222,6 +222,8 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { sliderType, value: sliderValue, disabled: sliderValue === null, + min: stateObj.attributes.min_temp, + max: stateObj.attributes.max_temp }); this._updateSetTemp(uiValue); } From 2f3b39945090c13fa96d872ad821fc57dcc6bdb0 Mon Sep 17 00:00:00 2001 From: DBCL Date: Fri, 13 Sep 2019 23:27:28 +0200 Subject: [PATCH 03/21] Please the linter --- src/panels/lovelace/cards/hui-thermostat-card.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/lovelace/cards/hui-thermostat-card.ts b/src/panels/lovelace/cards/hui-thermostat-card.ts index 5ec56a3d5a..9ca11ab80b 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -223,7 +223,7 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { value: sliderValue, disabled: sliderValue === null, min: stateObj.attributes.min_temp, - max: stateObj.attributes.max_temp + max: stateObj.attributes.max_temp, }); this._updateSetTemp(uiValue); } From 4bb65b8ae1eb0ec7ea5aad8679a1359be5b4aaa7 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Sat, 14 Sep 2019 14:56:16 +0200 Subject: [PATCH 04/21] Make data table and checkbox themeable (#3712) Added rgb vars, not sure we want to go that way, but otherwise we will get a lot of styles... --- src/components/ha-checkbox.ts | 15 +++- src/components/ha-data-table.ts | 144 ++++++++++++++++++++++++++++++-- src/resources/ha-style.ts | 14 ++++ 3 files changed, 167 insertions(+), 6 deletions(-) diff --git a/src/components/ha-checkbox.ts b/src/components/ha-checkbox.ts index 99c294f4f7..c4ef540352 100644 --- a/src/components/ha-checkbox.ts +++ b/src/components/ha-checkbox.ts @@ -1,7 +1,8 @@ -import { Constructor, customElement } from "lit-element"; +import { Constructor, customElement, CSSResult, css } from "lit-element"; import "@material/mwc-checkbox"; // tslint:disable-next-line import { Checkbox } from "@material/mwc-checkbox"; +import { style } from "@material/mwc-checkbox/mwc-checkbox-css"; // tslint:disable-next-line const MwcCheckbox = customElements.get("mwc-checkbox") as Constructor; @@ -11,6 +12,18 @@ export class HaCheckbox extends MwcCheckbox { super.firstUpdated(); this.style.setProperty("--mdc-theme-secondary", "var(--primary-color)"); } + + protected static get styles(): CSSResult[] { + return [ + style, + css` + .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate) + ~ .mdc-checkbox__background { + border-color: rgba(var(--rgb-primary-text-color), 0.54); + } + `, + ]; + } } declare global { diff --git a/src/components/ha-data-table.ts b/src/components/ha-data-table.ts index df5ae384c8..770c60eea4 100644 --- a/src/components/ha-data-table.ts +++ b/src/components/ha-data-table.ts @@ -14,15 +14,11 @@ import { css, customElement, property, - unsafeCSS, classMap, TemplateResult, PropertyValues, } from "@material/mwc-base/base-element"; -// @ts-ignore -import styles from "@material/data-table/dist/mdc.data-table.min.css"; - import memoizeOne from "memoize-one"; import "./ha-icon"; @@ -416,7 +412,145 @@ export class HaDataTable extends BaseElement { static get styles(): CSSResult { return css` - ${unsafeCSS(styles)} + /* default mdc styles, colors changed, without checkbox styles */ + + .mdc-data-table__content { + font-family: Roboto, sans-serif; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 400; + letter-spacing: 0.0178571429em; + text-decoration: inherit; + text-transform: inherit; + } + + .mdc-data-table { + background-color: var(--card-background-color); + border-radius: 4px; + border-width: 1px; + border-style: solid; + border-color: rgba(var(--rgb-primary-text-color), 0.12); + display: inline-flex; + flex-direction: column; + box-sizing: border-box; + overflow-x: auto; + } + + .mdc-data-table__row--selected { + background-color: rgba(var(--rgb-primary-color), 0.04); + } + + .mdc-data-table__row { + border-top-color: rgba(var(--rgb-primary-text-color), 0.12); + } + + .mdc-data-table__row { + border-top-width: 1px; + border-top-style: solid; + } + + .mdc-data-table__row:not(.mdc-data-table__row--selected):hover { + background-color: rgba(var(--rgb-primary-text-color), 0.04); + } + + .mdc-data-table__header-cell { + color: var(--primary-text-color); + } + + .mdc-data-table__cell { + color: var(--primary-text-color); + } + + .mdc-data-table__header-row { + height: 56px; + } + + .mdc-data-table__row { + height: 52px; + } + + .mdc-data-table__cell, + .mdc-data-table__header-cell { + padding-right: 16px; + padding-left: 16px; + } + + .mdc-data-table__header-cell--checkbox, + .mdc-data-table__cell--checkbox { + /* @noflip */ + padding-left: 16px; + /* @noflip */ + padding-right: 0; + } + [dir="rtl"] .mdc-data-table__header-cell--checkbox, + .mdc-data-table__header-cell--checkbox[dir="rtl"], + [dir="rtl"] .mdc-data-table__cell--checkbox, + .mdc-data-table__cell--checkbox[dir="rtl"] { + /* @noflip */ + padding-left: 0; + /* @noflip */ + padding-right: 16px; + } + + .mdc-data-table__table { + width: 100%; + border: 0; + white-space: nowrap; + border-collapse: collapse; + } + + .mdc-data-table__cell { + font-family: Roboto, sans-serif; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 400; + letter-spacing: 0.0178571429em; + text-decoration: inherit; + text-transform: inherit; + } + + .mdc-data-table__cell--numeric { + text-align: right; + } + [dir="rtl"] .mdc-data-table__cell--numeric, + .mdc-data-table__cell--numeric[dir="rtl"] { + /* @noflip */ + text-align: left; + } + + .mdc-data-table__header-cell { + font-family: Roboto, sans-serif; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-size: 0.875rem; + line-height: 1.375rem; + font-weight: 500; + letter-spacing: 0.0071428571em; + text-decoration: inherit; + text-transform: inherit; + text-align: left; + } + [dir="rtl"] .mdc-data-table__header-cell, + .mdc-data-table__header-cell[dir="rtl"] { + /* @noflip */ + text-align: right; + } + + .mdc-data-table__header-cell--numeric { + text-align: right; + } + [dir="rtl"] .mdc-data-table__header-cell--numeric, + .mdc-data-table__header-cell--numeric[dir="rtl"] { + /* @noflip */ + text-align: left; + } + + /* custom from here */ + .mdc-data-table { display: block; } diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts index d171a11c76..51e3752dab 100644 --- a/src/resources/ha-style.ts +++ b/src/resources/ha-style.ts @@ -123,9 +123,23 @@ documentContainer.innerHTML = ` --paper-slider-container-color: var(--slider-bar-color); --ha-paper-slider-pin-font-size: 15px; + /* rgb */ + --rgb-primary-color: 3, 169, 244; + --rgb-accent-color: 255, 152, 0; + --rgb-primary-text-color: 33, 33, 33; + --rgb-secondary-text-color: 114, 114, 114; + --rgb-text-primary-color: 255, 255, 255; + /* mwc */ --mdc-theme-primary: var(--primary-color); --mdc-theme-secondary: var(--accent-color); + --mdc-theme-background: var(--primary-background-color); + --mdc-theme-surface: var(--card-background-color); + + /* mwc text styles */ + --mdc-theme-on-primary: var(--primary-text-color); + --mdc-theme-on-secondary: var(--text-primary-color); + --mdc-theme-on-surface: var(--primary-text-color); } From 979257237001b5bcf4bdf30a62f7a05039640318 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Sat, 14 Sep 2019 15:00:44 +0200 Subject: [PATCH 05/21] chnage order dev tools (#3715) --- .../ha-panel-developer-tools.ts | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/panels/developer-tools/ha-panel-developer-tools.ts b/src/panels/developer-tools/ha-panel-developer-tools.ts index b0c9878046..9e22c2b97f 100644 --- a/src/panels/developer-tools/ha-panel-developer-tools.ts +++ b/src/panels/developer-tools/ha-panel-developer-tools.ts @@ -48,12 +48,24 @@ class PanelDeveloperTools extends LitElement { .selected=${page} @iron-activate=${this.handlePageSelected} > - - ${this.hass.localize("ui.panel.developer-tools.tabs.info.title")} + + ${this.hass.localize( + "ui.panel.developer-tools.tabs.states.title" + )} + + + ${this.hass.localize( + "ui.panel.developer-tools.tabs.services.title" + )} ${this.hass.localize("ui.panel.developer-tools.tabs.logs.title")} + + ${this.hass.localize( + "ui.panel.developer-tools.tabs.templates.title" + )} + ${this.hass.localize( "ui.panel.developer-tools.tabs.events.title" @@ -68,20 +80,8 @@ class PanelDeveloperTools extends LitElement { ` : ""} - - ${this.hass.localize( - "ui.panel.developer-tools.tabs.services.title" - )} - - - ${this.hass.localize( - "ui.panel.developer-tools.tabs.states.title" - )} - - - ${this.hass.localize( - "ui.panel.developer-tools.tabs.templates.title" - )} + + ${this.hass.localize("ui.panel.developer-tools.tabs.info.title")} From 16ae52c3216c051445f8b606085e63c5b541cfc3 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Sat, 14 Sep 2019 21:02:43 +0800 Subject: [PATCH 06/21] Fix regression in device automation from #3643 (#3717) --- src/components/device/ha-device-automation-picker.ts | 2 +- src/components/device/ha-device-picker.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/device/ha-device-automation-picker.ts b/src/components/device/ha-device-automation-picker.ts index cd79540dd8..98c5ce492a 100644 --- a/src/components/device/ha-device-automation-picker.ts +++ b/src/components/device/ha-device-automation-picker.ts @@ -24,7 +24,7 @@ const UNKNOWN_AUTOMATION_KEY = "UNKNOWN_AUTOMATION"; export abstract class HaDeviceAutomationPicker< T extends DeviceAutomation > extends LitElement { - public hass!: HomeAssistant; + @property() public hass!: HomeAssistant; @property() public label?: string; @property() public deviceId?: string; @property() public value?: T; diff --git a/src/components/device/ha-device-picker.ts b/src/components/device/ha-device-picker.ts index f9c64578a1..3e17e093c7 100644 --- a/src/components/device/ha-device-picker.ts +++ b/src/components/device/ha-device-picker.ts @@ -24,7 +24,7 @@ import { compare } from "../../common/string/compare"; @customElement("ha-device-picker") class HaDevicePicker extends LitElement { - public hass?: HomeAssistant; + @property() public hass?: HomeAssistant; @property() public label?: string; @property() public value?: string; @property() public devices?: DeviceRegistryEntry[]; From 6627a96a050b368313a8e263fc3225689ca81d04 Mon Sep 17 00:00:00 2001 From: Sean Mooney Date: Sat, 14 Sep 2019 23:32:13 -0400 Subject: [PATCH 07/21] Add documentation link on Events panel adds a link to events documentation which contains helpful information for using this tool. --- .../developer-tools/event/developer-tools-event.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/panels/developer-tools/event/developer-tools-event.js b/src/panels/developer-tools/event/developer-tools-event.js index dd772af390..04943ecf5b 100644 --- a/src/panels/developer-tools/event/developer-tools-event.js +++ b/src/panels/developer-tools/event/developer-tools-event.js @@ -45,8 +45,14 @@ class HaPanelDevEvent extends EventsMixin(PolymerElement) {
-

Fire an event on the event bus.

- +

+ Fire an event on the event bus. + Events Documentation. +

Date: Sun, 15 Sep 2019 00:31:36 -0400 Subject: [PATCH 08/21] Update developer-tools-event.js --- src/panels/developer-tools/event/developer-tools-event.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/panels/developer-tools/event/developer-tools-event.js b/src/panels/developer-tools/event/developer-tools-event.js index 04943ecf5b..8ad73fc080 100644 --- a/src/panels/developer-tools/event/developer-tools-event.js +++ b/src/panels/developer-tools/event/developer-tools-event.js @@ -48,11 +48,11 @@ class HaPanelDevEvent extends EventsMixin(PolymerElement) {

Fire an event on the event bus. Events Documentation.Events Documentation. -

+

Date: Sun, 15 Sep 2019 00:53:28 -0400 Subject: [PATCH 09/21] prettier fix, hopefully third time's a charm? --- src/panels/developer-tools/event/developer-tools-event.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/developer-tools/event/developer-tools-event.js b/src/panels/developer-tools/event/developer-tools-event.js index 8ad73fc080..3bf1ccee0a 100644 --- a/src/panels/developer-tools/event/developer-tools-event.js +++ b/src/panels/developer-tools/event/developer-tools-event.js @@ -52,7 +52,7 @@ class HaPanelDevEvent extends EventsMixin(PolymerElement) { target="_blank" >Events Documentation. -

+

Date: Mon, 16 Sep 2019 11:39:09 +0200 Subject: [PATCH 10/21] Update cover_icon.ts Add new icons for existing device types --- src/common/entity/cover_icon.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/entity/cover_icon.ts b/src/common/entity/cover_icon.ts index f75a2a1bf4..e36c3b9c4b 100644 --- a/src/common/entity/cover_icon.ts +++ b/src/common/entity/cover_icon.ts @@ -9,6 +9,10 @@ export default function coverIcon(state: HassEntity): string { return open ? "hass:garage-open" : "hass:garage"; case "door": return open ? "hass:door-open" : "hass:door-closed"; + case "shutter": + return open ? "hass:window-shutter-open" : "hass:window-shutter"; + case "blind": + return open ? "hass:blinds-open" : "hass:blinds"; case "window": return open ? "hass:window-open" : "hass:window-closed"; default: From 1d95b9d779912de289de195535b0b180a975a881 Mon Sep 17 00:00:00 2001 From: PDekker Date: Mon, 16 Sep 2019 14:01:47 +0200 Subject: [PATCH 11/21] Update src/common/entity/cover_icon.ts Co-Authored-By: Bram Kragten --- src/common/entity/cover_icon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/entity/cover_icon.ts b/src/common/entity/cover_icon.ts index e36c3b9c4b..fa4c2eaff7 100644 --- a/src/common/entity/cover_icon.ts +++ b/src/common/entity/cover_icon.ts @@ -12,7 +12,7 @@ export default function coverIcon(state: HassEntity): string { case "shutter": return open ? "hass:window-shutter-open" : "hass:window-shutter"; case "blind": - return open ? "hass:blinds-open" : "hass:blinds"; + return open ? "hass:blinds-open" : "hass:blinds"; case "window": return open ? "hass:window-open" : "hass:window-closed"; default: From 1341fe9ae9f928b887a60cb17b88a8b475ce4f3d Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 16 Sep 2019 19:09:07 +0200 Subject: [PATCH 12/21] Open more info in unused entities (#3714) * Open more info in unused entities * Only make entity column open more info --- src/components/ha-data-table.ts | 24 +++++++++++++++---- .../unused-entities/hui-unused-entities.ts | 16 +++++++++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/components/ha-data-table.ts b/src/components/ha-data-table.ts index 770c60eea4..73ccd31c79 100644 --- a/src/components/ha-data-table.ts +++ b/src/components/ha-data-table.ts @@ -32,10 +32,15 @@ declare global { // for fire event interface HASSDomEvents { "selection-changed": SelectionChangedEvent; + "row-click": RowClickedEvent; "sorting-changed": SortingChangedEvent; } } +export interface RowClickedEvent { + id: string; +} + export interface SelectionChangedEvent { id: string; selected: boolean; @@ -266,7 +271,11 @@ export class HaDataTable extends BaseElement { ), (row: DataTabelRowData) => row[this.id], (row: DataTabelRowData) => html` - + ${this.selectable ? html` html` - - ${stateObj.friendly_name} +
+ + ${stateObj.friendly_name} +
`, }, entity_id: { @@ -166,6 +169,15 @@ export class HuiUnusedEntities extends LitElement { } } + private _handleEntityClicked(ev: Event) { + const entityId = (ev.target as HTMLElement) + .closest("tr")! + .getAttribute("data-row-id")!; + fireEvent(this, "hass-more-info", { + entityId, + }); + } + private _selectView(): void { showSelectViewDialog(this, { lovelace: this.lovelace!, From 3b51e55f2d4e3e510d48162b3b92cfe57a5b9c41 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 16 Sep 2019 21:56:22 +0200 Subject: [PATCH 13/21] Update logs on activate tab (#3716) * Update logs on activate tab * Only update if we already loaded data --- .../logs/developer-tools-logs.ts | 18 ++++++++++--- .../developer-tools/logs/system-log-card.ts | 26 ++++++++++++------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/panels/developer-tools/logs/developer-tools-logs.ts b/src/panels/developer-tools/logs/developer-tools-logs.ts index 6bc7190ffd..5f6a0a5c91 100644 --- a/src/panels/developer-tools/logs/developer-tools-logs.ts +++ b/src/panels/developer-tools/logs/developer-tools-logs.ts @@ -5,6 +5,8 @@ import { css, TemplateResult, property, + query, + customElement, } from "lit-element"; import { HomeAssistant } from "../../../types"; @@ -12,10 +14,22 @@ import { haStyle } from "../../../resources/styles"; import "../logs/system-log-card"; import "../logs/error-log-card"; +// tslint:disable-next-line +import { SystemLogCard } from "../logs/system-log-card"; -class HaPanelDevLogs extends LitElement { +@customElement("developer-tools-logs") +export class HaPanelDevLogs extends LitElement { @property() public hass!: HomeAssistant; + @query("system-log-card") private systemLog?: SystemLogCard; + + public connectedCallback() { + super.connectedCallback(); + if (this.systemLog && this.systemLog.loaded) { + this.systemLog.fetchData(); + } + } + protected render(): TemplateResult | void { return html`
@@ -48,5 +62,3 @@ declare global { "developer-tools-logs": HaPanelDevLogs; } } - -customElements.define("developer-tools-logs", HaPanelDevLogs); diff --git a/src/panels/developer-tools/logs/system-log-card.ts b/src/panels/developer-tools/logs/system-log-card.ts index 1d3e264e46..1406e26f3b 100644 --- a/src/panels/developer-tools/logs/system-log-card.ts +++ b/src/panels/developer-tools/logs/system-log-card.ts @@ -5,6 +5,7 @@ import { css, PropertyDeclarations, TemplateResult, + customElement, } from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item-body"; @@ -29,8 +30,10 @@ const formatLogTime = (date, language: string) => { : formatTime(dateTime, language); }; -class SystemLogCard extends LitElement { +@customElement("system-log-card") +export class SystemLogCard extends LitElement { public hass?: HomeAssistant; + public loaded = false; private _items?: LoggedError[]; static get properties(): PropertyDeclarations { @@ -40,6 +43,11 @@ class SystemLogCard extends LitElement { }; } + public async fetchData(): Promise { + this._items = undefined; + this._items = await fetchSystemLog(this.hass!); + } + protected render(): TemplateResult | void { return html`
@@ -91,7 +99,7 @@ class SystemLogCard extends LitElement { service="clear" >Clear - Refresh
@@ -103,7 +111,8 @@ class SystemLogCard extends LitElement { protected firstUpdated(changedProps): void { super.firstUpdated(changedProps); - this._fetchData(); + this.fetchData(); + this.loaded = true; this.addEventListener("hass-service-called", (ev) => this.serviceCalled(ev) ); @@ -119,11 +128,6 @@ class SystemLogCard extends LitElement { } } - private async _fetchData(): Promise { - this._items = undefined; - this._items = await fetchSystemLog(this.hass!); - } - private _openLog(ev: Event): void { const item = (ev.currentTarget as any).logItem; showSystemLogDetailDialog(this, { item }); @@ -153,4 +157,8 @@ class SystemLogCard extends LitElement { } } -customElements.define("system-log-card", SystemLogCard); +declare global { + interface HTMLElementTagNameMap { + "system-log-card": SystemLogCard; + } +} From bf343647d4eee6159dd48454aaf1f64ed827419e Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 16 Sep 2019 23:03:16 +0200 Subject: [PATCH 14/21] Fix background on panel (#3713) * Fix background on panel * Make themes work on panel * fix for tabs-hidden * and still not gone... --- src/panels/lovelace/hui-root.ts | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index 0427199331..be69750dfa 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -42,8 +42,9 @@ import { HUIView } from "./hui-view"; import { createCardElement } from "./common/create-card-element"; import { showEditViewDialog } from "./editor/view-editor/show-edit-view-dialog"; import { showEditLovelaceDialog } from "./editor/lovelace-editor/show-edit-lovelace-dialog"; -import { Lovelace } from "./types"; +import { Lovelace, LovelaceCard } from "./types"; import { afterNextRender } from "../../common/util/render-status"; +import applyThemesOnElement from "../../common/dom/apply_themes_on_element"; import { haStyle } from "../../resources/styles"; import { computeRTLDirection } from "../../common/util/compute_rtl"; import { loadLovelaceResources } from "./common/load-resources"; @@ -361,10 +362,22 @@ class HUIRoot extends LitElement { position: relative; display: flex; } + #view > * { + flex: 1; + width: 100%; + } #view.tabs-hidden { min-height: calc(100vh - 64px); } - #view > * { + #panel { + background: var(--lovelace-background); + min-height: calc(100vh - 112px); + display: flex; + } + #panel.tabs-hidden { + min-height: calc(100vh - 64px); + } + #panel > * { flex: 1; width: 100%; } @@ -613,8 +626,15 @@ class HUIRoot extends LitElement { view = this._viewCache![viewIndex]; } else { if (viewConfig.panel && viewConfig.cards && viewConfig.cards.length > 0) { - view = createCardElement(viewConfig.cards[0]); - view.isPanel = true; + view = document.createElement("div"); + view.id = "panel"; + if (viewConfig.theme) { + applyThemesOnElement(view, this.hass!.themes, viewConfig.theme); + } + const card = createCardElement(viewConfig.cards[0]); + card.hass = this.hass; + (card as LovelaceCard).isPanel = true; + view.append(card); } else { view = document.createElement("hui-view"); view.lovelace = this.lovelace; From 065e42c8fd0b7c3218edb60b9a9a1ddc7f8724da Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 16 Sep 2019 23:42:25 -0600 Subject: [PATCH 15/21] Fix Cast race condition (#3732) --- cast/src/receiver/layout/hc-main.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cast/src/receiver/layout/hc-main.ts b/cast/src/receiver/layout/hc-main.ts index bfefc08159..63f0b30fc7 100644 --- a/cast/src/receiver/layout/hc-main.ts +++ b/cast/src/receiver/layout/hc-main.ts @@ -57,7 +57,13 @@ export class HcMain extends HassElement { `; } - if (!this._lovelaceConfig || this._lovelacePath === null) { + if ( + !this._lovelaceConfig || + this._lovelacePath === null || + // Guard against part of HA not being loaded yet. + (this.hass && + (!this.hass.states || !this.hass.config || !this.hass.services)) + ) { return html` Date: Tue, 17 Sep 2019 07:45:21 +0200 Subject: [PATCH 16/21] Hide columns in unused entities on mobile (#3719) * Hide columns in unused entities on mobile * Update hui-unused-entities.ts * Fix * Update hui-unused-entities.ts --- .../unused-entities/hui-unused-entities.ts | 66 ++++++++++++------- src/panels/lovelace/hui-root.ts | 1 + 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts b/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts index 3e2aab27b2..cccf63a37a 100644 --- a/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts +++ b/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts @@ -10,6 +10,9 @@ import { } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; + +import memoizeOne from "memoize-one"; + import "../../../../components/ha-fab"; import "../../../../components/entity/state-badge"; import "../../../../components/ha-relative-time"; @@ -17,7 +20,10 @@ import "../../../../components/ha-icon"; import "../../../../components/ha-data-table"; // tslint:disable-next-line -import { SelectionChangedEvent } from "../../../../components/ha-data-table"; +import { + SelectionChangedEvent, + DataTabelColumnContainer, +} from "../../../../components/ha-data-table"; import computeStateName from "../../../../common/entity/compute_state_name"; import computeDomain from "../../../../common/entity/compute_domain"; @@ -38,6 +44,8 @@ export class HuiUnusedEntities extends LitElement { @property() public hass?: HomeAssistant; + @property() public narrow?: boolean; + @property() private _unusedEntities: string[] = []; private _selectedEntities: string[] = []; @@ -46,31 +54,41 @@ export class HuiUnusedEntities extends LitElement { return this.lovelace!.config; } - private _columns = { - entity: { - title: "Entity", - sortable: true, - filterable: true, - filterKey: "friendly_name", - direction: "asc", - template: (stateObj) => html` -
- - ${stateObj.friendly_name} -
- `, - }, - entity_id: { + private _columns = memoizeOne((narrow: boolean) => { + const columns: DataTabelColumnContainer = { + entity: { + title: "Entity", + sortable: true, + filterable: true, + filterKey: "friendly_name", + direction: "asc", + template: (stateObj) => html` +
+ + ${stateObj.friendly_name} +
+ `, + }, + }; + + if (narrow) { + return columns; + } + + columns.entity_id = { title: "Entity id", sortable: true, filterable: true, - }, - domain: { + }; + columns.domain = { title: "Domain", sortable: true, filterable: true, - }, - last_changed: { + }; + columns.last_changed = { title: "Last Changed", type: "numeric", sortable: true, @@ -80,8 +98,10 @@ export class HuiUnusedEntities extends LitElement { .datetime=${lastChanged} > `, - }, - }; + }; + + return columns; + }); protected updated(changedProperties: PropertyValues): void { super.updated(changedProperties); @@ -114,7 +134,7 @@ export class HuiUnusedEntities extends LitElement {
{ const stateObj = this.hass!.states[entity]; return { diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index be69750dfa..939dba9c46 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -602,6 +602,7 @@ class HUIRoot extends LitElement { () => { unusedEntities.hass = this.hass!; unusedEntities.lovelace = this.lovelace!; + unusedEntities.narrow = this.narrow; } ); if (this.config.background) { From 29ab04fc7ab6719cbf5e53c9ffc89e7a402a71dd Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 17 Sep 2019 07:45:56 +0200 Subject: [PATCH 17/21] Add subscribe mixin (#3710) * Add subscribe mixin * Update src/mixins/subscribe-mixin.ts Co-Authored-By: Paulus Schoutsen * Update src/mixins/subscribe-mixin.ts Co-Authored-By: Paulus Schoutsen * Update subscribe-mixin.ts * Update subscribe-mixin.ts * Add properties * Fix --- src/components/device/ha-device-picker.ts | 25 +++------ src/mixins/subscribe-mixin.ts | 65 +++++++++++++++++++++++ 2 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 src/mixins/subscribe-mixin.ts diff --git a/src/components/device/ha-device-picker.ts b/src/components/device/ha-device-picker.ts index 3e17e093c7..cd7dfe7688 100644 --- a/src/components/device/ha-device-picker.ts +++ b/src/components/device/ha-device-picker.ts @@ -14,6 +14,8 @@ import { property, } from "lit-element"; import { UnsubscribeFunc } from "home-assistant-js-websocket"; +import { SubscribeMixin } from "../../../src/mixins/subscribe-mixin"; + import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; import { @@ -23,12 +25,11 @@ import { import { compare } from "../../common/string/compare"; @customElement("ha-device-picker") -class HaDevicePicker extends LitElement { +class HaDevicePicker extends SubscribeMixin(LitElement) { @property() public hass?: HomeAssistant; @property() public label?: string; @property() public value?: string; @property() public devices?: DeviceRegistryEntry[]; - private _unsubDevices?: UnsubscribeFunc; private _sortedDevices = memoizeOne((devices?: DeviceRegistryEntry[]) => { if (!devices || devices.length === 1) { @@ -39,22 +40,12 @@ class HaDevicePicker extends LitElement { return sorted; }); - public connectedCallback() { - super.connectedCallback(); - this._unsubDevices = subscribeDeviceRegistry( - this.hass!.connection!, - (devices) => { + public hassSubscribe(): UnsubscribeFunc[] { + return [ + subscribeDeviceRegistry(this.hass!.connection!, (devices) => { this.devices = devices; - } - ); - } - - public disconnectedCallback() { - super.disconnectedCallback(); - if (this._unsubDevices) { - this._unsubDevices(); - this._unsubDevices = undefined; - } + }), + ]; } protected render(): TemplateResult | void { diff --git a/src/mixins/subscribe-mixin.ts b/src/mixins/subscribe-mixin.ts new file mode 100644 index 0000000000..25cca233b5 --- /dev/null +++ b/src/mixins/subscribe-mixin.ts @@ -0,0 +1,65 @@ +import { + LitElement, + Constructor, + PropertyValues, + PropertyDeclarations, +} from "lit-element"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; + +export interface HassSubscribeElement { + hassSubscribe(): UnsubscribeFunc[]; +} + +/* tslint:disable-next-line */ +export const SubscribeMixin = ( + superClass: Constructor +): Constructor => + // @ts-ignore + class extends superClass { + /* tslint:disable-next-line */ + private __unsubs?: UnsubscribeFunc[]; + + static get properties(): PropertyDeclarations { + return { + hass: {}, + }; + } + + public connectedCallback() { + super.connectedCallback(); + this.__checkSubscribed(); + } + + public disconnectedCallback() { + super.disconnectedCallback(); + if (this.__unsubs) { + while (this.__unsubs.length) { + this.__unsubs.pop()!(); + } + this.__unsubs = undefined; + } + } + + protected updated(changedProps: PropertyValues) { + super.updated(changedProps); + if (changedProps.has("hass")) { + this.__checkSubscribed(); + } + } + + protected hassSubscribe(): UnsubscribeFunc[] { + super.hassSubscribe(); + return []; + } + + private __checkSubscribed(): void { + if ( + this.__unsubs !== undefined || + !((this as unknown) as Element).isConnected || + super.hass === undefined + ) { + return; + } + this.__unsubs = this.hassSubscribe(); + } + }; From 42626ba2f88265bc7df01cb55257459577144aa0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 16 Sep 2019 23:46:22 -0600 Subject: [PATCH 18/21] Upgrade set-value (#3733) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 745619fab6..c80eed1c6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10583,9 +10583,9 @@ set-value@^0.4.3: to-object-path "^0.3.0" set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" From f4f1e24ad538393248edd759dcbd2bd8e116333a Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 17 Sep 2019 07:46:53 +0200 Subject: [PATCH 19/21] Generate rgb theme vars (#3728) * Create rgb theme vars * Check if key is rgb and revert paper * Update apply_themes_on_element.ts * paper-card > card --- src/common/dom/apply_themes_on_element.ts | 31 +++++++++++++++++++++-- src/resources/ha-style.ts | 2 +- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/common/dom/apply_themes_on_element.ts b/src/common/dom/apply_themes_on_element.ts index 51faa0ca98..029ef1d3cc 100644 --- a/src/common/dom/apply_themes_on_element.ts +++ b/src/common/dom/apply_themes_on_element.ts @@ -1,3 +1,18 @@ +const hexToRgb = (hex: string): string | null => { + const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + const checkHex = hex.replace(shorthandRegex, (_m, r, g, b) => { + return r + r + g + g + b + b; + }); + + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(checkHex); + return result + ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt( + result[3], + 16 + )}` + : null; +}; + /** * Apply a theme to an element by setting the CSS variables on it. * @@ -23,15 +38,27 @@ export default function applyThemesOnElement( if (themeName !== "default") { const theme = themes.themes[themeName]; Object.keys(theme).forEach((key) => { - const prefixedKey = "--" + key; + const prefixedKey = `--${key}`; element._themes[prefixedKey] = ""; styles[prefixedKey] = theme[key]; + if (key.startsWith("rgb")) { + return; + } + const rgbKey = `--rgb-${key}`; + if (theme[rgbKey] === undefined) { + return; + } + element._themes[rgbKey] = ""; + const rgbValue = hexToRgb(theme[key]); + if (rgbValue !== null) { + styles[rgbKey] = rgbValue; + } }); } if (element.updateStyles) { element.updateStyles(styles); } else if (window.ShadyCSS) { - // implement updateStyles() method of Polemer elements + // implement updateStyles() method of Polymer elements window.ShadyCSS.styleSubtree(/** @type {!HTMLElement} */ (element), styles); } diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts index 51e3752dab..25bcb40c96 100644 --- a/src/resources/ha-style.ts +++ b/src/resources/ha-style.ts @@ -134,7 +134,7 @@ documentContainer.innerHTML = ` --mdc-theme-primary: var(--primary-color); --mdc-theme-secondary: var(--accent-color); --mdc-theme-background: var(--primary-background-color); - --mdc-theme-surface: var(--card-background-color); + --mdc-theme-surface: var(--paper-card-background-color, var(--card-background-color)); /* mwc text styles */ --mdc-theme-on-primary: var(--primary-text-color); From 8fd8274d1583901ed9511b2449b792840d87d466 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 17 Sep 2019 07:49:52 +0200 Subject: [PATCH 20/21] Bumped version to 20190917.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e6fbd0cc93..975f7fa1f0 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20190911.1", + version="20190917.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", From fad2f1790f7285cc4e5a7c2f1db9ef73651bcef9 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 17 Sep 2019 07:50:38 +0200 Subject: [PATCH 21/21] Update translations (#3735) --- translations/bg.json | 114 +++++++++++++++- translations/ca.json | 5 +- translations/da.json | 5 +- translations/el.json | 32 +++++ translations/en.json | 3 + translations/es.json | 3 + translations/et.json | 3 + translations/fr.json | 15 ++- translations/hu.json | 3 + translations/hy.json | 271 ++++++++++++++++++++++++++++++++------ translations/is.json | 27 ++++ translations/it.json | 5 +- translations/ko.json | 3 + translations/lb.json | 60 +++++++-- translations/nb.json | 38 +++++- translations/nl.json | 3 + translations/pl.json | 3 + translations/ru.json | 3 + translations/sl.json | 38 +++++- translations/zh-Hant.json | 14 +- 20 files changed, 580 insertions(+), 68 deletions(-) diff --git a/translations/bg.json b/translations/bg.json index f9cf622f13..1a9674497f 100644 --- a/translations/bg.json +++ b/translations/bg.json @@ -251,7 +251,8 @@ "snowy-rainy": "Снежно, дъждовно", "sunny": "Слънчево", "windy": "Ветровито", - "windy-variant": "Ветровито" + "windy-variant": "Ветровито", + "exceptional": "Изключително" }, "vacuum": { "cleaning": "Почистване", @@ -327,6 +328,9 @@ }, "info": { "title": "Информация" + }, + "logs": { + "title": "Журнали" } } }, @@ -498,6 +502,9 @@ "event": "Събитие:", "enter": "Влизане", "leave": "Излизане" + }, + "device": { + "label": "Устройство" } }, "learn_more": "Научете повече за тригерите" @@ -544,6 +551,9 @@ "label": "Зона", "entity": "Обект с местоположение", "zone": "Зона" + }, + "device": { + "label": "Устройство" } }, "learn_more": "Научете повече за условията" @@ -578,6 +588,9 @@ "label": "Стартирай събитие", "event": "Събитие", "service_data": "Сервизна информация" + }, + "device_id": { + "label": "Устройство" } }, "learn_more": "Научете повече за действията" @@ -620,12 +633,21 @@ "common": { "value": "Стойност", "instance": "Устройство", - "index": "Индекс" + "index": "Индекс", + "unknown": "неизвестно", + "wakeup_interval": "Интервал за събуждане" }, "values": { "header": "Стойности на устройсто" }, "node_config": { + "header": "Конфигурационни опции на устройството", + "seconds": "секунди", + "set_wakeup": "Настрой интервал за събуждане", + "config_parameter": "Конфигурационен параметър", + "config_value": "Конфигурационна стойност", + "true": "Вярно", + "false": "Невярно", "set_config_parameter": "Задайте параметър Config" } }, @@ -738,7 +760,10 @@ "unavailable": "Този обект не е достъпeн към момента.", "default_name": "Нова област", "delete": "ИЗТРИВАНЕ", - "update": "АКТУАЛИЗАЦИЯ" + "update": "АКТУАЛИЗАЦИЯ", + "enabled_label": "Активирай обекта", + "enabled_cause": "Изключено от {cause}", + "enabled_description": "Изключените обекти няма да бъдат добавени в Home Assistant." } }, "person": { @@ -750,6 +775,36 @@ "device_tracker_picked": "Устройство за проследяване", "device_tracker_pick": "Изберете устройство за проследяване" } + }, + "server_control": { + "caption": "Управление на сървъра", + "description": "Рестартиране и спиране на Home Assistant сървъра", + "section": { + "validation": { + "heading": "Проверка на конфигурацията", + "introduction": "Проверете конфигурацията, ако скоро сте направили промени и искате да се уверите, че всичко работи", + "check_config": "Проверка на конфигурацията", + "valid": "Валидна конфигурация!", + "invalid": "Невалидна конфигурация" + }, + "reloading": { + "heading": "Презареждане на конфигурацията", + "introduction": "Някои части от Home Assistant могат да се презаредят без да е необходимо рестартиране. Натискането на Презареди ще отхвърли настоящата конфигурация и ще зареди новата конфигурация.", + "core": "Презареждане на ядрото", + "group": "Презареждане на гурпите", + "automation": "Презареждане на автоматизациите", + "script": "Презареждане на скриптовете", + "scene": "Презареди сцените" + }, + "server_management": { + "heading": "Управление на сървъра", + "introduction": "Управляване на Home Assistant сървъра... от Home Assistant.", + "restart": "Рестартирай", + "stop": "Спри", + "confirm_restart": "Сигурни ли сте, че искате да рестартирате Home Assistant?", + "confirm_stop": "Сигурни ли сте, че искате да спрете Home Assistant?" + } + } } }, "profile": { @@ -1014,6 +1069,10 @@ "save": "Запазване", "unsaved_changes": "Незапазени промени", "saved": "Запазено" + }, + "edit_lovelace": { + "header": "Заглавие на вашия Lovelace потребителски интерфейс", + "explanation": "Това заглавие се показва над всичките ви изгледи в Lovelace" } }, "menu": { @@ -1083,7 +1142,8 @@ "common": { "loading": "Зареждане", "cancel": "Отмени", - "save": "Запазване" + "save": "Запазване", + "successfully_saved": "Успешно запазено" }, "duration": { "day": "{count}{count, plural,\n one {ден}\n other {дни}\n}", @@ -1159,7 +1219,9 @@ "fan": { "speed": "Скорост", "oscillate": "Въртене", - "direction": "Посока" + "direction": "Посока", + "forward": "Напред", + "reverse": "Назад" }, "light": { "brightness": "Яркост", @@ -1204,6 +1266,14 @@ "target_temperature": "Желана температура", "operation": "Режим", "away_mode": "Режим на отсъствие" + }, + "timer": { + "actions": { + "start": "старт", + "pause": "пауза", + "cancel": "прекратяване", + "finish": "финал" + } } }, "components": { @@ -1257,6 +1327,33 @@ "updater": { "title": "Инструкции за актуализиране" } + }, + "options_flow": { + "form": { + "header": "Опции" + }, + "success": { + "description": "Опциите бяха запазени успешно." + } + }, + "config_entry_system_options": { + "title": "Системни опции", + "enable_new_entities_label": "Активирай новодобавените устройства.", + "enable_new_entities_description": "Ако е изключено, новооткритите устройства няма да бъдат автоматично добавени в Home Assistant" + }, + "zha_device_info": { + "manuf": "от {manufacturer}", + "no_area": "Без област", + "services": { + "reconfigure": "Преконфигурирайте ZHA устройство (оздравяване на устройство). Използвайте това, ако имате проблеми с устройството. Ако въпросното устройство е захранвано с батерии, моля, уверете се, че е будно и приема команди, когато използвате тази услуга.", + "updateDeviceName": "Задайте персонализирано име за това устройство в регистъра на устройствата.", + "remove": "Премахване на устройство от ZigBee мрежата." + }, + "zha_device_card": { + "device_name_placeholder": "Име, зададено от потребителя", + "area_picker_label": "Област", + "update_name_button": "Актуализиране на името" + } } }, "auth_store": { @@ -1352,5 +1449,12 @@ "system-admin": "Администратори", "system-users": "Потребители", "system-read-only": "Потребители с достъп само за четене" + }, + "config_entry": { + "disabled_by": { + "user": "Потребител", + "integration": "Интеграция", + "config_entry": "Конфигурационен запис" + } } } \ No newline at end of file diff --git a/translations/ca.json b/translations/ca.json index 08f5badf2e..104cbe6fcc 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -454,7 +454,7 @@ "mqtt": { "label": "MQTT", "topic": "Topic", - "payload": "Dades (opcional)" + "payload": "Dades\/payload (opcional)" }, "numeric_state": { "label": "Estat numèric", @@ -588,6 +588,9 @@ "label": "Disparar esdeveniment", "event": "Esdeveniment:", "service_data": "Dades de servei" + }, + "device_id": { + "label": "Dispositiu" } }, "learn_more": "Més informació sobre les accions" diff --git a/translations/da.json b/translations/da.json index 9ee018949a..70861db985 100644 --- a/translations/da.json +++ b/translations/da.json @@ -142,7 +142,7 @@ "heat_pump": "Varmepumpe", "gas": "Gas", "manual": "Manual", - "heat_cool": "Varme\/køl" + "heat_cool": "Opvarm\/køl" }, "configurator": { "configure": "Konfigurer", @@ -588,6 +588,9 @@ "label": "Afsend hændelse", "event": "Hændelse:", "service_data": "Service data" + }, + "device_id": { + "label": "Enhed" } }, "learn_more": "Lær om handlinger" diff --git a/translations/el.json b/translations/el.json index 656dbe0b2c..41605d0ad2 100644 --- a/translations/el.json +++ b/translations/el.json @@ -551,6 +551,9 @@ "label": "Ζώνη", "entity": "Οντότητα με τοποθεσία", "zone": "Ζώνη" + }, + "device": { + "label": "Συσκευή" } }, "learn_more": "Μάθετε περισσότερα σχετικά με τις συνθήκες" @@ -585,6 +588,9 @@ "label": "Εκκίνηση συμβάντος", "event": "Γεγονός:", "service_data": "Δεδομένα υπηρεσίας" + }, + "device_id": { + "label": "Συσκευή" } }, "learn_more": "Μάθετε περισσότερα σχετικά με τις ενέργειες" @@ -1063,6 +1069,10 @@ "save": "Αποθήκευση", "unsaved_changes": "Μη αποθηκευμένες αλλαγές", "saved": "Αποθηκεύτηκε" + }, + "edit_lovelace": { + "header": "Τίτλος του περιβάλλοντος εργασίας σας Lovelace", + "explanation": "Αυτός ο τίτλος εμφανίζεται πάνω από όλες τις καρτέλες σας στο Lovelace." } }, "menu": { @@ -1256,6 +1266,14 @@ "target_temperature": "Επιθυμητή θερμοκρασία", "operation": "Λειτουργία", "away_mode": "Λειτουργία 'Είμαι εκτός'" + }, + "timer": { + "actions": { + "start": "Εκκίνηση", + "pause": "Παύση", + "cancel": "Ακύρωση", + "finish": "Ολοκληρώθηκαν" + } } }, "components": { @@ -1322,6 +1340,20 @@ "title": "Επιλογές συστήματος", "enable_new_entities_label": "Ενεργοποίηση οντοτήτων που προστέθηκαν πρόσφατα.", "enable_new_entities_description": "Αν απενεργοποιηθεί, οι πρόσφατα ανακαλυφθείσες οντότητες δεν θα προστεθούν αυτόματα στον Home Assistant." + }, + "zha_device_info": { + "manuf": "από τον {manufacturer}", + "no_area": "Καμία περιοχή", + "services": { + "reconfigure": "Ρυθμίστε ξανά τη συσκευή ZHA ( συσκευή θεραπείας). Χρησιμοποιήστε αυτήν την επιλογή εάν αντιμετωπίζετε προβλήματα με τη συσκευή. Εάν η συγκεκριμένη συσκευή τροφοδοτείται από μπαταρία παρακαλώ βεβαιωθείτε ότι είναι ενεργοποιημένη και δέχεται εντολές όταν χρησιμοποιείτε αυτή την υπηρεσία.", + "updateDeviceName": "Ορίστε ένα προσαρμοσμένο όνομα γι αυτήν τη συσκευή στο μητρώο συσκευών.", + "remove": "Καταργήστε μια συσκευή από το δίκτυο ZigBee." + }, + "zha_device_card": { + "device_name_placeholder": "Όνομα δοσμένο από τον χρήστη", + "area_picker_label": "Περιοχή", + "update_name_button": "Ενημέρωση ονόματος" + } } }, "auth_store": { diff --git a/translations/en.json b/translations/en.json index 530b298e9a..9d731df86a 100644 --- a/translations/en.json +++ b/translations/en.json @@ -588,6 +588,9 @@ "label": "Fire event", "event": "Event:", "service_data": "Service data" + }, + "device_id": { + "label": "Device" } }, "learn_more": "Learn more about actions" diff --git a/translations/es.json b/translations/es.json index 3cca058d14..ae4eda0b10 100644 --- a/translations/es.json +++ b/translations/es.json @@ -588,6 +588,9 @@ "label": "Disparar evento", "event": "Evento:", "service_data": "Datos de servicio" + }, + "device_id": { + "label": "Dispositivo" } }, "learn_more": "Aprende más sobre las acciones." diff --git a/translations/et.json b/translations/et.json index 77270e5866..11ae7d1cbb 100644 --- a/translations/et.json +++ b/translations/et.json @@ -588,6 +588,9 @@ "label": "Vallanda sündmus", "event": "Sündmus:", "service_data": "Teenuse andmed" + }, + "device_id": { + "label": "Seade" } }, "learn_more": "Lisateave tegevuste kohta" diff --git a/translations/fr.json b/translations/fr.json index 8bc20626c0..c2f55684e6 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -321,7 +321,7 @@ "title": "Événements" }, "templates": { - "title": "Gabarit" + "title": "Template" }, "mqtt": { "title": "MQTT" @@ -516,7 +516,7 @@ "duplicate": "Dupliquer", "delete": "Effacement", "delete_confirm": "Voulez-vous vraiment effacer ?", - "unsupported_condition": "Condition non supportée : {condition}", + "unsupported_condition": "Condition non supportée: {condition}", "type_select": "Type de condition", "type": { "state": { @@ -539,8 +539,8 @@ "sunset": "Coucher du soleil" }, "template": { - "label": "Gabarit", - "value_template": "Valeur du gabarit" + "label": "Template", + "value_template": "Contenu du template" }, "time": { "label": "Heure", @@ -588,6 +588,9 @@ "label": "Déclencher l'évènement", "event": "Évènement :", "service_data": "Données du service" + }, + "device_id": { + "label": "Appareil" } }, "learn_more": "En savoir plus sur les actions" @@ -850,7 +853,7 @@ "last_used": "Dernière utilisation le {date} à partir de {location}", "not_used": "N'a jamais été utilisé" }, - "current_user": "Vous êtes actuellement connecté tant que {fullName}.", + "current_user": "Vous êtes actuellement connecté en tant que {fullName}.", "is_owner": "Vous êtes propriétaire", "change_password": { "header": "Changer le mot de passe", @@ -1207,7 +1210,7 @@ }, "automation": { "last_triggered": "Dernier déclenchement", - "trigger": "Déclencheur" + "trigger": "Déclencher" }, "cover": { "position": "Emplacement", diff --git a/translations/hu.json b/translations/hu.json index 7c7560ce12..ea66b231ec 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -588,6 +588,9 @@ "label": "Esemény meghívása", "event": "Esemény:", "service_data": "Szolgáltatás adatai" + }, + "device_id": { + "label": "Eszköz" } }, "learn_more": "Tudj meg többet a műveletekről" diff --git a/translations/hy.json b/translations/hy.json index 8ac77660fb..4e277d046f 100644 --- a/translations/hy.json +++ b/translations/hy.json @@ -6,6 +6,7 @@ "logbook": "Մատյան", "history": "Պատմություն", "mailbox": "Փոստարկղ", + "shopping_list": "Գնումների ցուցակ", "dev-info": "Ինֆորմացիա", "developer_tools": "Մշակողի գործիքներ", "calendar": "Օրացույց", @@ -18,37 +19,63 @@ "unknown": "հայտնի չէ", "unavailable": "Անհասանելի" }, - "climate": { - "cool": "Հովացում", - "auto": "Ավտոմատ", - "dry": "Չոր", - "manual": "Ձեռնարկ", - "heat_cool": "Ջեռուցում\/Հովացում" - }, - "cover": { - "open": "Բաց", - "opening": "Բացում", - "closed": "Փակված", - "closing": "Փակում", - "stopped": "Դադարեց" - }, - "device_tracker": { - "home": "Տուն", - "not_home": "Հեռու" - }, - "lock": { - "locked": "Կողպված է", - "unlocked": "Բաց է" - }, - "zwave": { - "default": { - "ready": "Պատրաստ է" - } - }, "alarm_control_panel": { + "armed": "Զինված", + "disarmed": "Զինաթափված", + "armed_home": "Զինված տուն", + "armed_away": "Զինված", + "armed_night": "Զինված գիշեր", + "pending": "Սպասում", + "arming": "Զինել", + "disarming": "Զինաթափող", + "triggered": "պատճառը", "armed_custom_bypass": "Զինման անհատական կոդ" }, + "automation": { + "off": "Անջատված", + "on": "Միացած" + }, "binary_sensor": { + "default": { + "off": "Անջատված", + "on": "Միացած" + }, + "moisture": { + "off": "Չոր", + "on": "Խոնավ" + }, + "gas": { + "off": "Մաքրել", + "on": "Հայտնաբերվել է" + }, + "motion": { + "off": "Մաքրել", + "on": "Հայտնաբերվել է" + }, + "occupancy": { + "off": "Մաքրել", + "on": "Հայտնաբերվել է" + }, + "smoke": { + "off": "Մաքրել", + "on": "Հայտնաբերվել է" + }, + "sound": { + "off": "Մաքրել", + "on": "Հայտնաբերվել է" + }, + "vibration": { + "off": "Մաքրել", + "on": "Հայտնաբերվել է" + }, + "opening": { + "off": "Փակված", + "on": "Բաց" + }, + "safety": { + "off": "Ապահով", + "on": "Անվտանգ" + }, "presence": { "off": "Հեռու", "on": "Տուն" @@ -90,6 +117,126 @@ "on": "բացել է" } }, + "calendar": { + "off": "Անջատված", + "on": "Միացած" + }, + "camera": { + "recording": "Ձայնագրությունը", + "streaming": "Հոսք", + "idle": "պարապ" + }, + "climate": { + "off": "Անջատված", + "on": "Միացած", + "heat": "Ջերմություն", + "cool": "Հովացում", + "idle": "Պարապ", + "auto": "Ավտոմատ", + "dry": "Չոր", + "fan_only": "Օդափոխիչ", + "eco": "Էկո", + "electric": "Էլեկտրական", + "performance": "Կատարում", + "high_demand": "Բարձր պահանջարկ", + "heat_pump": "Ջերմային պոմպ", + "gas": "Գազ", + "manual": "Ձեռնարկ", + "heat_cool": "Ջեռուցում\/Հովացում" + }, + "configurator": { + "configure": "Կարգավորել", + "configured": "Կարգավորված" + }, + "cover": { + "open": "Բաց", + "opening": "Բացում", + "closed": "Փակված", + "closing": "Փակում", + "stopped": "Դադարեց" + }, + "device_tracker": { + "home": "Տուն", + "not_home": "Հեռու" + }, + "fan": { + "off": "Անջատված", + "on": "Միացած" + }, + "group": { + "off": "Անջատված", + "on": "Միացած", + "home": "Տուն", + "not_home": "Հեռու", + "open": "Բացեք", + "opening": "Բացում", + "closed": "Փակված", + "closing": "Փակում", + "stopped": "Դադարեց", + "locked": "կողպված է", + "unlocked": "Բացել է", + "ok": "Լավ", + "problem": "Խնդիր" + }, + "input_boolean": { + "off": "Անջատված", + "on": "Միացած" + }, + "light": { + "off": "Սնջատված", + "on": "Միացած" + }, + "lock": { + "locked": "Կողպված է", + "unlocked": "Բաց է" + }, + "media_player": { + "off": "Անջատած", + "on": "Միացած", + "playing": "Խաղում", + "paused": "Դադար է", + "idle": "Պարապ", + "standby": "Սպասում" + }, + "plant": { + "ok": "Լավ", + "problem": "Խնդիր" + }, + "remote": { + "off": "Անջատված", + "on": "Միացած" + }, + "scene": { + "scening": "Փորագրություն" + }, + "script": { + "off": "Անջատված", + "on": "Միացած" + }, + "sensor": { + "off": "Անջատված", + "on": "միացած" + }, + "sun": { + "above_horizon": "Հորիզոնի վերևում", + "below_horizon": "Հորիզոնի ներքևում" + }, + "switch": { + "off": "անջատված", + "on": "միացած" + }, + "zwave": { + "default": { + "initializing": "Նախաձեռնող", + "dead": "Մեռած", + "sleeping": "Քնել", + "ready": "Պատրաստ է" + }, + "query_stage": { + "initializing": "Նախաձեռնություն({query_stage})", + "dead": "Մահացած{query_stage})" + } + }, "weather": { "clear-night": "Մաքրել ստուգված իրերը", "cloudy": "Ամպամած", @@ -143,6 +290,7 @@ "pending": "Պենդ", "arming": "Զինել", "disarming": "Անջատել տագնապը", + "triggered": "թրիգ", "armed_custom_bypass": "Զինված" }, "device_tracker": { @@ -201,20 +349,15 @@ "delete_button": "Ջնջել" }, "config": { + "header": "Կարգավորել Home Assistant-ը", + "introduction": "Այստեղ հնարավոր է կարգավորել ձեր բաղադրիչները և Home Assistant:Դեռ ամեն ինչ հնարավոր չէ կազմաձևել UI- ից, բայց մենք աշխատում ենք այդ ուղղությամբ", "core": { + "caption": "Գեներալ", + "description": "Փոխեք ձեր Home Assistant-ի կարգավորումը", "section": { - "server_control": { - "reloading": { - "script": "Վերբեռնել սցենարներ" - }, - "server_management": { - "heading": "Սերվերի կառավարում", - "introduction": "Վերահսկեք ձեր Գլխավոր օգնական սերվերը… Տնային օգնականից:", - "restart": "Վերսկսել", - "stop": "Դադար" - } - }, "core": { + "header": "Ընդհանուր կարգավորումը", + "introduction": "Ձեր կարգավորումների փոխելը կարող է լինել հոգնեցուցիչ ։գործընթաց: Մենք գիտենք. Այս բաժինը կփորձի ձեր կյանքը մի փոքր դյուրին դարձնել:", "core_config": { "edit_requires_storage": "Խմբագիրն անջատված է, քանի որ կարգավորումները կատարվել են .yaml- ում:", "location_name": "Ձեր Home Assistant-ի տեղադրման անվանումը", @@ -230,6 +373,29 @@ "metric_example": "Ցելսիուս, կիլոգրամ", "save_button": "Պահպանել" } + }, + "server_control": { + "validation": { + "heading": "Կարգավորման վավերացում", + "introduction": "Վավերացրեք ձեր կազմաձևումը, եթե վերջերս որոշ փոփոխություններ եք կատարել ձեր կազմաձևում և ցանկանում եք համոզվել, որ այդ ամենը վավեր է", + "check_config": "Ստուգեք կարգավորումը", + "valid": "Կարգավորումը վավեր է:", + "invalid": "Կարգավորումը սխալ է" + }, + "reloading": { + "heading": "Կարգավորման վերաբեռնում", + "introduction": "Home Assistant-ի որոշ մասեր կարող են վերբեռնվել առանց վերագործարկման (restart): Սեղմելով վերաբեռնել կոճակը ընթացիկ կարգավորումը կփոխարինվի նորով։", + "core": "Վերափոխեք հիմնականը", + "group": "Վերբեռնեք խմբերը", + "automation": "Վերբեռնեք ավտոմատները", + "script": "Վերբեռնել սցենարներ" + }, + "server_management": { + "heading": "Սերվերի կառավարում", + "introduction": "Վերահսկեք ձեր Գլխավոր օգնական սերվերը… Տնային օգնականից:", + "restart": "Վերսկսել", + "stop": "Դադար" + } } } }, @@ -248,6 +414,7 @@ "header": "Ավտոմատացման խմբագիր", "introduction": "Ավտոմատացման խմբագրիչը թույլ է տալիս ստեղծել և խմբագրել ավտոմատացումը: Խնդրում ենք հետևել հետևյալ հղմանը ՝ հրահանգները կարդալու համար, որպեսզի համոզվեք, որ ճիշտ կազմաձևել եք Home Assistant-ը", "pick_automation": " խմբագրելու համար ընտրել ավտոմատացում", + "no_automations": "Խմբագրերի ավտոմատացում չի գտնվել", "add_automation": "Ավելացնել ավտոմատացում", "learn_more": "Իմանալ ավելին ավտոմատացման մասին" }, @@ -297,6 +464,7 @@ }, "sun": { "label": "Արև", + "event": "Իրադարձություն", "sunrise": "Արևածագ", "sunset": "Մայրամուտ", "offset": "Օֆսեթ (պարտադիր)" @@ -312,6 +480,8 @@ "zone": { "label": "Գոտի", "entity": "Կազմակերպության գտնվելու վայրը", + "zone": "Գոտի", + "event": "Իրադարձություն", "enter": "Մուտքագրել", "leave": "Թողնել" }, @@ -343,10 +513,20 @@ "header": "Պայմանները", "introduction": "Պայմանները ավտոմատացման կանոնների կամընտիր մասն են և կարող են օգտագործվել կանխելու համար գործողությունը կատարելու համար: Պայմանները շատ նման են հարուցիչների, բայց շատ տարբեր են: Ձգան կանդրադառնա համակարգում տեղի ունեցող իրադարձություններին, մինչդեռ մի պայման միայն նայում է, թե ինչպես է համակարգը հիմա նայում: Ձգան կարող է նկատել, որ անջատիչը միացված է: Մի պայման կարող է տեսնել միայն այն դեպքում, արդյոք անջատիչը ներկայում միացված է կամ անջատված է:", "add": "Ավելացնել պայման", + "duplicate": "Կրկնօրինակել", + "delete": "Ջնջել", + "delete_confirm": "Ցանկանւմ եք ջնջել?", "unsupported_condition": "Չաջակցված պայման. {condition}", "type_select": "Պայմանի տեսակը", "type": { + "state": { + "label": "Պետություն", + "state": "Պետություն" + }, "numeric_state": { + "label": "Թվային վիճակ", + "above": "Վերևում", + "below": "ներքևում", "value_template": "Արժեքի պարտադիր ձևանմուշ" }, "sun": { @@ -381,7 +561,17 @@ "actions": { "header": "Գործողություններ", "introduction": "Գործողությունները Տնային օգնականի տանը պետք է անել, երբ ավտոմատացումը գործարկվի.", + "add": "Ավելացնել գործողություն", + "duplicate": "Կրկնօրինակել", + "delete": "Ջնջել", + "delete_confirm": "Ցանկանւմ եք ջնջել?", + "unsupported_action": "Չաջակցված գործողություն. {action}", + "type_select": "Գործողության տեսակը", "type": { + "service": { + "label": "Զանգի ծառայություն", + "service_data": "Ծառայության տվյալները" + }, "delay": { "label": "Հետաձգում", "delay": "Հետաձգում" @@ -398,6 +588,9 @@ "label": "Հրդեհային իրադարձություն", "event": "Իրադարձություն", "service_data": "Ծառայության տվյալներ" + }, + "device_id": { + "label": "Սարքը" } }, "learn_more": "Իմանալ ավելին գործողությունների մասին" @@ -539,6 +732,7 @@ "picker": { "header": "Տարածքի գրանցամատյան", "introduction": "Տարածքները օգտագործվում են կազմակերպելու համար, թե որտեղ են սարքերը: Այս տեղեկատվությունը կօգտագործվի ամբողջ Տնային օգնականի համար `օգնելու ձեզ կազմակերպել ձեր ինտերֆեյսը, թույլտվությունները և այլ համակարգերի հետ ինտեգրումը:", + "introduction2": "Սարքերը մի տարածքում տեղադրելու համար օգտագործեք ներքևում նշված հղումը ՝ ինտեգրման էջին անցնելու համար, այնուհետև կտտացրեք կարգավորված ինտեգրմանը ՝ սարքի քարտերին հասնելու համար:", "integrations_page": "Ինտեգրման էջ", "no_areas": "դեռ տարածքներ չկան", "create_area": "Ստեղծել տարածք" @@ -635,6 +829,7 @@ }, "refresh_tokens": { "header": "Թարմացման token", + "description": "Թարմացման յուրաքանչյուր նշանը ներկայացնում է մուտքի նստաշրջան: Թարմացնել նշանները ավտոմատ կերպով կհանվեն, երբ կտտացրեք դուրս գալը: Հետևյալ թարմացման նշանները ներկայումս ակտիվ են ձեր հաշվի համար:", "token_title": "Թարմացման token {clientId}-ի համար", "created_at": "Ստեղծվել է {ամսաթիվ}", "confirm_delete": "Համոզվա՞ծ եք, որ ցանկանում եք ջնջել թարմացման նշանը {name} :", diff --git a/translations/is.json b/translations/is.json index e2fc794da6..22ec37aea8 100644 --- a/translations/is.json +++ b/translations/is.json @@ -452,6 +452,9 @@ "event": "Viðburður:", "enter": "Koma", "leave": "Brottför" + }, + "device": { + "label": "Tæki" } }, "learn_more": "Læra meira um kveikjur" @@ -528,6 +531,9 @@ "label": "Skjóta viðburði", "event": "Viðburður:", "service_data": "Þjónustu gögn" + }, + "device_id": { + "label": "Tæki" } }, "learn_more": "Læra meira um aðgerðir" @@ -561,6 +567,9 @@ "save_config": "Vista stillingar", "cancel_command": "Hætta við skipun" }, + "common": { + "unknown": "óþekkt" + }, "node_config": { "seconds": "sekúndur", "config_value": "Stillingargildi", @@ -1143,6 +1152,14 @@ "target_temperature": "Viðmiðunarhitastig", "operation": "Aðgerð", "away_mode": "Fjarverandi hamur" + }, + "timer": { + "actions": { + "start": "byrja", + "pause": "hlé", + "cancel": "hætta við", + "finish": "lokið" + } } }, "components": { @@ -1196,6 +1213,11 @@ "updater": { "title": "Uppfærslu leiðbeiningar" } + }, + "options_flow": { + "form": { + "header": "Valkostir" + } } }, "auth_store": { @@ -1278,5 +1300,10 @@ "system-admin": "Stjórnendur", "system-users": "Notendur", "system-read-only": "Notendur með lesaðgang" + }, + "config_entry": { + "disabled_by": { + "user": "Notandi" + } } } \ No newline at end of file diff --git a/translations/it.json b/translations/it.json index 8db432daf0..b9e245d6a5 100644 --- a/translations/it.json +++ b/translations/it.json @@ -588,6 +588,9 @@ "label": "Scatena Evento", "event": "Evento:", "service_data": "Dati servizio" + }, + "device_id": { + "label": "Dispositivo" } }, "learn_more": "Per saperne di più sulle azioni" @@ -1354,7 +1357,7 @@ } }, "auth_store": { - "ask": "Vuoi salvare questo login?", + "ask": "Salvare questo account di accesso?", "decline": "No grazie", "confirm": "Salva login" }, diff --git a/translations/ko.json b/translations/ko.json index cfbea9b80d..3f6b969a32 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -588,6 +588,9 @@ "label": "이벤트 발생", "event": "이벤트:", "service_data": "서비스 데이터" + }, + "device_id": { + "label": "기기" } }, "learn_more": "동작에 대해 더 알아보기" diff --git a/translations/lb.json b/translations/lb.json index 6f9840dcb4..e7077ec9fe 100644 --- a/translations/lb.json +++ b/translations/lb.json @@ -251,7 +251,8 @@ "snowy-rainy": "Schnéi, Reen", "sunny": "Sonneg", "windy": "Lëfteg", - "windy-variant": "Lëfteg" + "windy-variant": "Lëfteg", + "exceptional": "Aussergewéinlech" }, "vacuum": { "cleaning": "Botzt", @@ -327,6 +328,9 @@ }, "info": { "title": "Info" + }, + "logs": { + "title": "Logbicher" } } }, @@ -349,7 +353,7 @@ "introduction": "Hei ass et méiglech är Komponenten vum Home Assistant ze konfiguréieren. Net alles ass méiglech fir iwwert den Interface anzestellen, mee mir schaffen drun.", "core": { "caption": "Generell", - "description": "Konfiguratioun validéieren an de Server kontrolléieren", + "description": "Ännert är generell Home Assistant Konfiguratioun", "section": { "core": { "header": "Konfiguratioun an Server Kontroll", @@ -498,6 +502,9 @@ "event": "Evenement", "enter": "Betrieden", "leave": "Verloossen" + }, + "device": { + "label": "Apparat" } }, "learn_more": "Méi iwwert Ausléiser liesen" @@ -506,7 +513,7 @@ "header": "Konditiounen", "introduction": "Konditioune sinn een optionalen Deel vun engem Automatismus a kënne benotzt gi fir ze bestëmme wann eng Aktioun ausgeféiert gëtt. Konditioune gläichen den Ausléiser mee sinn awer ganz ënnerschiddlech. Een Ausléiser iwwerwaacht d'Evenementer am System, an eng Konditioun iwwerwaacht de Status vum System. Een Ausléiser gesäit wann ee Schalter ugeschalt gëtt. Eng Konditioun gesäit nëmmen op de Schalter un oder aus ass.\n\n[Léier méi iwwer Konditioune.](https:\/\/home-assistant.io\/docs\/scripts\/conditions\/)", "add": "Konditioun dobäisetzen", - "duplicate": "Replikéiere", + "duplicate": "Duplikéiere", "delete": "Läschen", "delete_confirm": "Sëcher fir ze läschen?", "unsupported_condition": "Net ënnerstëtzte Konditioun: {condition}", @@ -544,6 +551,9 @@ "label": "Zon", "entity": "Entitéit mam Standuert", "zone": "Zon" + }, + "device": { + "label": "Apparat" } }, "learn_more": "Méi iwwert Konditioune liesen" @@ -552,7 +562,7 @@ "header": "Aktiounen", "introduction": "Aktioune déi den Home Assistant ausféiert wann den Automatismus ausgeléist gouf.\n[Léier méi iwwert Aktiounen.](https:\/\/home-assistant.io\/docs\/automation\/action\/)", "add": "Aktioun dobäisetzen", - "duplicate": "Replikéiere", + "duplicate": "Duplikéiere", "delete": "Läschen", "delete_confirm": "Element sécher läschen?", "unsupported_action": "Net ënnerstëtzten Aktioun: {action}", @@ -578,6 +588,9 @@ "label": "Evenement starten", "event": "Evenement:", "service_data": "Service-Donnéeën" + }, + "device_id": { + "label": "Apparat" } }, "learn_more": "Méi iwwert Aktioune liesen" @@ -787,7 +800,9 @@ "heading": "Serververwaltung", "introduction": "Kontrolléiert ären Home Assistant Server ... vun Home Assistant aus.", "restart": "Neistart", - "stop": "Stop" + "stop": "Stop", + "confirm_restart": "Sécher fir Home Assistant frësch ze starten?", + "confirm_stop": "Sécher fir Home Assistant ze stoppen?" } } } @@ -1054,6 +1069,10 @@ "save": "Späicheren", "unsaved_changes": "Net gespäicherten Ännerungen", "saved": "Gespäichert" + }, + "edit_lovelace": { + "header": "Titel vun ärem Lovelace Benotzer Interface", + "explanation": "Dësen Titel gëtt iwwert den Usiichte vu Lovelace ugewisen." } }, "menu": { @@ -1123,7 +1142,8 @@ "common": { "loading": "Lued", "cancel": "Ofbriechen", - "save": "Späicheren" + "save": "Späicheren", + "successfully_saved": "Erfollegräich gespäichert." }, "duration": { "day": "{count} {count, plural,\none {Dag}\nother {Deeg}\n}", @@ -1199,7 +1219,9 @@ "fan": { "speed": "Vitesse", "oscillate": "Pendele", - "direction": "Richtung" + "direction": "Richtung", + "forward": "Vir", + "reverse": "Hannerzeg" }, "light": { "brightness": "Hellegkeet", @@ -1244,6 +1266,14 @@ "target_temperature": "Zieltemperatur", "operation": "Aktioun", "away_mode": "Modus Keen Doheem" + }, + "timer": { + "actions": { + "start": "Start", + "pause": "Pause", + "cancel": "Ofbriechen", + "finish": "Ofschléissen" + } } }, "components": { @@ -1282,7 +1312,7 @@ "dialogs": { "more_info_settings": { "save": "Späicheren", - "name": "Numm", + "name": "Numm iwwerschreiwen", "entity_id": "Entitéit ID" }, "more_info_control": { @@ -1310,6 +1340,20 @@ "title": "System Optiounen", "enable_new_entities_label": "Aktivéiert nei dobäigesate Entitéiten.", "enable_new_entities_description": "Falls desaktivéiert, ginn nei entdeckten Entitéiten net automatesch zu Home Assistant dobäigesat." + }, + "zha_device_info": { + "manuf": "vun {manufacturer}", + "no_area": "Kee Beräich", + "services": { + "reconfigure": "ZHA Apparat rekonfiguréieren (Apparat heelen). Benotzt dëst am Fall vu Problemer mam Apparat. Falls den Apparat duerch eng Batterie gespeist gëtt stellt sécher dass en un ass a Befeeler entgéint kann huelen", + "updateDeviceName": "Personaliséiert den Numm fir dësen Apparat an der Iwwersiicht vun den Apparaten.", + "remove": "Een Apparat vum Zigbee Reseau läschen." + }, + "zha_device_card": { + "device_name_placeholder": "Virnumm", + "area_picker_label": "Beräich", + "update_name_button": "Numm änneren" + } } }, "auth_store": { diff --git a/translations/nb.json b/translations/nb.json index a2dbe49f53..49d8b190f2 100644 --- a/translations/nb.json +++ b/translations/nb.json @@ -251,7 +251,8 @@ "snowy-rainy": "Sludd", "sunny": "Solfylt", "windy": "Vind", - "windy-variant": "Vind" + "windy-variant": "Vind", + "exceptional": "Eksepsjonell" }, "vacuum": { "cleaning": "Rengjør", @@ -550,6 +551,9 @@ "label": "Sone", "entity": "Enhet med posisjon", "zone": "Sone" + }, + "device": { + "label": "Enhet" } }, "learn_more": "Lær mer om betingelser" @@ -584,6 +588,9 @@ "label": "Kjør hendelse", "event": "Hendelse", "service_data": "Tjeneste data" + }, + "device_id": { + "label": "Enhet" } }, "learn_more": "Lær mer om handlinger" @@ -1062,6 +1069,10 @@ "save": "Lagre", "unsaved_changes": "Ulagrede endringer", "saved": "Lagret" + }, + "edit_lovelace": { + "header": "Tittel på Lovelace UI", + "explanation": "Denne tittelen vises over alle visningene dine i Lovelace." } }, "menu": { @@ -1131,7 +1142,8 @@ "common": { "loading": "Laster", "cancel": "Avbryt", - "save": "Lagre" + "save": "Lagre", + "successfully_saved": "Vellykket lagring" }, "duration": { "day": "{count} {count, plural,\none {dag}\nother {dager}\n}", @@ -1254,6 +1266,14 @@ "target_temperature": "Ønsket temperatur", "operation": "Drift", "away_mode": "Bortemodus" + }, + "timer": { + "actions": { + "start": "start", + "pause": "pause", + "cancel": "Avbryt", + "finish": "Fullføre" + } } }, "components": { @@ -1320,6 +1340,20 @@ "title": "Systemalternativer", "enable_new_entities_label": "Aktiver enheter som nylig er lagt til.", "enable_new_entities_description": "Hvis deaktivert, vil ikke nyoppdagede enheter automatisk bli lagt til i Home Assistant." + }, + "zha_device_info": { + "manuf": "av {manufacturer}", + "no_area": "Intet område", + "services": { + "reconfigure": "Rekonfigurer ZHA-enhet (heal enhet). Bruk dette hvis du har problemer med enheten. Hvis den aktuelle enheten er en batteridrevet enhet, sørg for at den er våken og aksepterer kommandoer når du bruker denne tjenesten.", + "updateDeviceName": "Angi et egendefinert navn for denne enheten i enhetsregisteret.", + "remove": "Fjern en enhet fra ZigBee-nettverket." + }, + "zha_device_card": { + "device_name_placeholder": "Brukers navn", + "area_picker_label": "Område", + "update_name_button": "Oppdater navn" + } } }, "auth_store": { diff --git a/translations/nl.json b/translations/nl.json index 95338934eb..6026c44336 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -588,6 +588,9 @@ "label": "Gebeurtenis uitvoeren", "event": "Gebeurtenis:", "service_data": "Service data" + }, + "device_id": { + "label": "Apparaat" } }, "learn_more": "Meer informatie over acties" diff --git a/translations/pl.json b/translations/pl.json index e77522dce7..24878a2d98 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -588,6 +588,9 @@ "label": "Wywołanie zdarzenia", "event": "Zdarzenie:", "service_data": "Dane usługi" + }, + "device_id": { + "label": "Urządzenie" } }, "learn_more": "Dowiedz się więcej o akcjach" diff --git a/translations/ru.json b/translations/ru.json index 783ea4616b..ac16175590 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -588,6 +588,9 @@ "label": "Создание события", "event": "Событие:", "service_data": "Данные" + }, + "device_id": { + "label": "Устройство" } }, "learn_more": "Узнайте больше о действиях" diff --git a/translations/sl.json b/translations/sl.json index 3bc593b7b4..0717a0131c 100644 --- a/translations/sl.json +++ b/translations/sl.json @@ -251,7 +251,8 @@ "snowy-rainy": "Snežno, deževno", "sunny": "Sončno", "windy": "Vetrovno", - "windy-variant": "Vetrovno" + "windy-variant": "Vetrovno", + "exceptional": "Izjemno" }, "vacuum": { "cleaning": "Čistim", @@ -550,6 +551,9 @@ "label": "Območje", "entity": "Entitete z lokacijo", "zone": "Območje" + }, + "device": { + "label": "Naprava" } }, "learn_more": "Več o pogojih" @@ -584,6 +588,9 @@ "label": "Požarni dogodek", "event": "Dogodek:", "service_data": "Podatki storitve" + }, + "device_id": { + "label": "Naprava" } }, "learn_more": "Več o akcijah" @@ -1062,6 +1069,10 @@ "save": "Shrani", "unsaved_changes": "Neshranjene spremembe", "saved": "Shranjeno" + }, + "edit_lovelace": { + "header": "Naslov vašega uporabniškega vmesnika Lovelace", + "explanation": "Ta naslov je prikazan nad vsemi vašimi pogledi v Lovelace-u." } }, "menu": { @@ -1131,7 +1142,8 @@ "common": { "loading": "Nalaganje", "cancel": "Prekliči", - "save": "Shrani" + "save": "Shrani", + "successfully_saved": "Shranjeno" }, "duration": { "day": "{count} {count, plural,\none {Dan}\nother {Dni}\n}", @@ -1254,6 +1266,14 @@ "target_temperature": "Ciljna temperatura", "operation": "Delovanje", "away_mode": "Način odsotnosti" + }, + "timer": { + "actions": { + "start": "Zagon", + "pause": "pavza", + "cancel": "Prekliči", + "finish": "Dokončaj" + } } }, "components": { @@ -1320,6 +1340,20 @@ "title": "Sistemske možnosti", "enable_new_entities_label": "Omogočite novo dodane subjekte.", "enable_new_entities_description": "Če je onemogočeno, novo odkrite entitete ne bodo samodejno dodane v Home Assistant." + }, + "zha_device_info": { + "manuf": "naredil: {manufacturer}", + "no_area": "Brez območja", + "services": { + "reconfigure": "Ponovno konfigurirajte napravo ZHA (\"pozdravite\" napravo). To uporabite, če imate z njo težave. Če ta naprava deluje na baterije, se prepričajte, da je budna in sprejema ukaze pri uporabi te storitve.", + "updateDeviceName": "Nastavite ime po meri za to napravo v registru naprav.", + "remove": "Odstranite napravo iz omrežja ZigBee." + }, + "zha_device_card": { + "device_name_placeholder": "Ime, ki ga je dodelil uporabnik", + "area_picker_label": "Območje", + "update_name_button": "Posodobi ime" + } } }, "auth_store": { diff --git a/translations/zh-Hant.json b/translations/zh-Hant.json index 5672c6cfed..cd8b15b1df 100644 --- a/translations/zh-Hant.json +++ b/translations/zh-Hant.json @@ -588,6 +588,9 @@ "label": "執行事件", "event": "事件:", "service_data": "資料" + }, + "device_id": { + "label": "裝置" } }, "learn_more": "詳細了解動作" @@ -674,7 +677,7 @@ "caption": "Home Assistant Cloud", "description_login": "登入帳號:{email}", "description_not_login": "未登入", - "description_features": "整合 Alexa 及 Google 助理,遠端控制智能家居。" + "description_features": "整合 Alexa 及 Google 助理,遠端控制智能家居" }, "integrations": { "caption": "整合", @@ -725,7 +728,7 @@ }, "area_registry": { "caption": "分區 ID", - "description": "家中所有分區概觀。", + "description": "家中所有分區概觀", "picker": { "header": "分區 ID", "introduction": "分區主要用以管理裝置所在位置。此資訊將會於 Home Assistant 中使用以協助您管理介面、權限,並與其他系統進行整合。", @@ -745,7 +748,7 @@ }, "entity_registry": { "caption": "物件 ID", - "description": "所有已知物件概觀。", + "description": "所有已知物件概觀", "picker": { "header": "物件 ID", "unavailable": "(不可用)", @@ -1068,7 +1071,8 @@ "saved": "已儲存" }, "edit_lovelace": { - "header": "Lovelace UI 的標題" + "header": "Lovelace UI 的標題", + "explanation": "此為 Lovelace 所有分視圖上方之標題。" } }, "menu": { @@ -1341,6 +1345,8 @@ "manuf": "由 {manufacturer}", "no_area": "無分區", "services": { + "reconfigure": "重新設定 ZHA Zibgee 裝置(健康裝置)。假如遇到裝置問題,請使用此選項。假如有問題的裝置為使用電池的裝置,請先確定裝置已喚醒並處於接受命令狀態。", + "updateDeviceName": "於物件 ID 中自訂此設備名稱。", "remove": "從 Zigbee 網路移除裝置。" }, "zha_device_card": {