mirror of
https://github.com/home-assistant/frontend.git
synced 2025-09-30 07:19:34 +00:00
Compare commits
1 Commits
20201229.1
...
selectors-
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4c2ca9224d |
@@ -14,7 +14,7 @@ This is the repository for the official [Home Assistant](https://home-assistant.
|
||||
- Development: [Instructions](https://developers.home-assistant.io/docs/frontend/development/)
|
||||
- Production build: `script/build_frontend`
|
||||
- Gallery: `cd gallery && script/develop_gallery`
|
||||
- Supervisor: [Instructions](https://developers.home-assistant.io/docs/supervisor/developing)
|
||||
- Hass.io: [Instructions](https://developers.home-assistant.io/docs/en/hassio_hass.html)
|
||||
|
||||
## Frontend development
|
||||
|
||||
|
@@ -7,8 +7,8 @@ export const createMediaPlayerEntities = () => [
|
||||
media_title: "I Wanna Be A Hippy (Flamman & Abraxas Radio Mix)",
|
||||
media_artist: "Technohead",
|
||||
// Pause + Seek + Volume Set + Volume Mute + Previous Track + Next Track + Play Media +
|
||||
// Select Source + Stop + Clear + Play + Shuffle Set
|
||||
supported_features: 64063,
|
||||
// Select Source + Stop + Clear + Play + Shuffle Set + Browse Media
|
||||
supported_features: 195135,
|
||||
entity_picture: "/images/album_cover_2.jpg",
|
||||
media_duration: 300,
|
||||
media_position: 50,
|
||||
@@ -24,8 +24,8 @@ export const createMediaPlayerEntities = () => [
|
||||
media_title: "I Wanna Be A Hippy (Flamman & Abraxas Radio Mix)",
|
||||
media_artist: "Technohead",
|
||||
// Pause + Seek + Volume Set + Volume Mute + Previous Track + Next Track + Play Media +
|
||||
// Select Source + Stop + Clear + Play + Shuffle Set + Browse Media
|
||||
supported_features: 195135,
|
||||
// Select Source + Stop + Clear + Play + Shuffle Set
|
||||
supported_features: 64063,
|
||||
entity_picture: "/images/album_cover.jpg",
|
||||
media_duration: 300,
|
||||
media_position: 0,
|
||||
|
@@ -146,16 +146,6 @@ const CONFIGS = [
|
||||
entity: media_player.receiver_off
|
||||
`,
|
||||
},
|
||||
{
|
||||
heading: "Grid Full Size",
|
||||
config: `
|
||||
- type: grid
|
||||
columns: 1
|
||||
cards:
|
||||
- type: media-control
|
||||
entity: media_player.music_paused
|
||||
`,
|
||||
},
|
||||
];
|
||||
|
||||
class DemoHuiMediControlCard extends PolymerElement {
|
||||
|
@@ -69,7 +69,7 @@ const STAGE_ICON = {
|
||||
const PERMIS_DESC = {
|
||||
stage: {
|
||||
title: "Add-on Stage",
|
||||
description: `Add-ons can have one of three stages:\n\n<ha-svg-icon path="${STAGE_ICON.stable}"></ha-svg-icon> **Stable**: These are add-ons ready to be used in production.\n\n<ha-svg-icon path="${STAGE_ICON.experimental}"></ha-svg-icon> **Experimental**: These may contain bugs, and may be unfinished.\n\n<ha-svg-icon path="${STAGE_ICON.deprecated}"></ha-svg-icon> **Deprecated**: These add-ons will no longer receive any updates.`,
|
||||
description: `Add-ons can have one of three stages:\n\n<ha-svg-icon .path='${STAGE_ICON.stable}'></ha-svg-icon> **Stable**: These are add-ons ready to be used in production.\n\n<ha-svg-icon .path='${STAGE_ICON.experimental}'></ha-svg-icon> **Experimental**: These may contain bugs, and may be unfinished.\n\n<ha-svg-icon .path='${STAGE_ICON.deprecated}'></ha-svg-icon> **Deprecated**: These add-ons will no longer receive any updates.`,
|
||||
},
|
||||
rating: {
|
||||
title: "Add-on Security Rating",
|
||||
|
@@ -74,7 +74,9 @@ export class HassioUpdate extends LitElement {
|
||||
"Supervisor",
|
||||
this.supervisor.supervisor,
|
||||
"hassio/supervisor/update",
|
||||
`https://github.com//home-assistant/hassio/releases/tag/${this.supervisor.supervisor.version_latest}`
|
||||
`https://github.com//home-assistant/hassio/releases/tag/${
|
||||
this.supervisor.supervisor.version_latest
|
||||
}`
|
||||
)}
|
||||
${this.supervisor.host.features.includes("hassos")
|
||||
? this._renderUpdateCard(
|
||||
|
@@ -178,7 +178,7 @@ class HassioSupervisorInfo extends LitElement {
|
||||
</div>`}
|
||||
${!this.supervisor.supervisor.healthy
|
||||
? html`<div class="error">
|
||||
Your installation is running in an unhealthy state.
|
||||
Your installtion is running in an unhealthy state.
|
||||
<button
|
||||
class="link"
|
||||
title="Learn more about why your system is marked as unhealthy"
|
||||
|
2
setup.py
2
setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20201229.1",
|
||||
version="20201126.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@@ -1,6 +0,0 @@
|
||||
export const ensureArray = (value?: any) => {
|
||||
if (!value || Array.isArray(value)) {
|
||||
return value;
|
||||
}
|
||||
return [value];
|
||||
};
|
@@ -67,10 +67,6 @@ export const computeStateDisplay = (
|
||||
}
|
||||
}
|
||||
|
||||
if (domain === "counter") {
|
||||
return formatNumber(compareState, language);
|
||||
}
|
||||
|
||||
return (
|
||||
// Return device class translation
|
||||
(stateObj.attributes.device_class &&
|
||||
|
@@ -1,12 +1,8 @@
|
||||
export const copyToClipboard = (str) => {
|
||||
if (navigator.clipboard) {
|
||||
navigator.clipboard.writeText(str);
|
||||
} else {
|
||||
const el = document.createElement("textarea");
|
||||
el.value = str;
|
||||
document.body.appendChild(el);
|
||||
el.select();
|
||||
document.execCommand("copy");
|
||||
document.body.removeChild(el);
|
||||
}
|
||||
const el = document.createElement("textarea");
|
||||
el.value = str;
|
||||
document.body.appendChild(el);
|
||||
el.select();
|
||||
document.execCommand("copy");
|
||||
document.body.removeChild(el);
|
||||
};
|
||||
|
@@ -98,12 +98,6 @@ export class HaDataTable extends LitElement {
|
||||
|
||||
@property({ type: Boolean }) public hasFab = false;
|
||||
|
||||
/**
|
||||
* Add an extra row at the bottom of the data table
|
||||
* @type {TemplateResult}
|
||||
*/
|
||||
@property({ attribute: false }) public appendRow?;
|
||||
|
||||
@property({ type: Boolean, attribute: "auto-height" })
|
||||
public autoHeight = false;
|
||||
|
||||
@@ -132,8 +126,6 @@ export class HaDataTable extends LitElement {
|
||||
|
||||
@query("slot[name='header']") private _header!: HTMLSlotElement;
|
||||
|
||||
private _items: DataTableRowData[] = [];
|
||||
|
||||
private _checkableRowsCount?: number;
|
||||
|
||||
private _checkedRows: string[] = [];
|
||||
@@ -326,13 +318,10 @@ export class HaDataTable extends LitElement {
|
||||
@scroll=${this._saveScrollPos}
|
||||
>
|
||||
${scroll({
|
||||
items: this._items,
|
||||
items: !this.hasFab
|
||||
? this._filteredData
|
||||
: [...this._filteredData, ...[{ empty: true }]],
|
||||
renderItem: (row: DataTableRowData, index) => {
|
||||
if (row.append) {
|
||||
return html`
|
||||
<div class="mdc-data-table__row">${row.content}</div>
|
||||
`;
|
||||
}
|
||||
if (row.empty) {
|
||||
return html` <div class="mdc-data-table__row"></div> `;
|
||||
}
|
||||
@@ -458,20 +447,6 @@ export class HaDataTable extends LitElement {
|
||||
if (this.curRequest !== curRequest) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.appendRow || this.hasFab) {
|
||||
this._items = [...data];
|
||||
|
||||
if (this.appendRow) {
|
||||
this._items.push({ append: true, content: this.appendRow });
|
||||
}
|
||||
|
||||
if (this.hasFab) {
|
||||
this._items.push({ empty: true });
|
||||
}
|
||||
} else {
|
||||
this._items = data;
|
||||
}
|
||||
this._filteredData = data;
|
||||
}
|
||||
|
||||
|
@@ -58,14 +58,6 @@ const sortData = (
|
||||
valB = valB.toUpperCase();
|
||||
}
|
||||
|
||||
// Ensure "undefined" is always sorted to the bottom
|
||||
if (valA === undefined && valB !== undefined) {
|
||||
return 1;
|
||||
}
|
||||
if (valB === undefined && valA !== undefined) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (valA < valB) {
|
||||
return sort * -1;
|
||||
}
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "../ha-svg-icon";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import "../ha-icon-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-item/paper-item-body";
|
||||
@@ -13,8 +12,6 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
PropertyValues,
|
||||
query,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import memoizeOne from "memoize-one";
|
||||
@@ -38,7 +35,6 @@ import {
|
||||
import { SubscribeMixin } from "../../mixins/subscribe-mixin";
|
||||
import { PolymerChangedEvent } from "../../polymer-types";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { mdiClose, mdiMenuUp, mdiMenuDown } from "@mdi/js";
|
||||
|
||||
interface Device {
|
||||
name: string;
|
||||
@@ -115,10 +111,6 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
@property({ type: Boolean })
|
||||
private _opened?: boolean;
|
||||
|
||||
@query("vaadin-combo-box-light", true) private _comboBox!: HTMLElement;
|
||||
|
||||
private _init = false;
|
||||
|
||||
private _getDevices = memoizeOne(
|
||||
(
|
||||
devices: DeviceRegistryEntry[],
|
||||
@@ -130,13 +122,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
deviceFilter: this["deviceFilter"]
|
||||
): Device[] => {
|
||||
if (!devices.length) {
|
||||
return [
|
||||
{
|
||||
id: "",
|
||||
area: "",
|
||||
name: this.hass.localize("ui.components.device-picker.no_devices"),
|
||||
},
|
||||
];
|
||||
return [];
|
||||
}
|
||||
|
||||
const deviceEntityLookup: DeviceEntityLookup = {};
|
||||
@@ -158,9 +144,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
areaLookup[area.area_id] = area;
|
||||
}
|
||||
|
||||
let inputDevices = devices.filter(
|
||||
(device) => device.id === this.value || !device.disabled_by
|
||||
);
|
||||
let inputDevices = [...devices];
|
||||
|
||||
if (includeDomains) {
|
||||
inputDevices = inputDevices.filter((device) => {
|
||||
@@ -227,15 +211,6 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
: this.hass.localize("ui.components.device-picker.no_area"),
|
||||
};
|
||||
});
|
||||
if (!outputDevices.length) {
|
||||
return [
|
||||
{
|
||||
id: "",
|
||||
area: "",
|
||||
name: this.hass.localize("ui.components.device-picker.no_match"),
|
||||
},
|
||||
];
|
||||
}
|
||||
if (outputDevices.length === 1) {
|
||||
return outputDevices;
|
||||
}
|
||||
@@ -243,18 +218,6 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
);
|
||||
|
||||
public open() {
|
||||
this.updateComplete.then(() => {
|
||||
(this.shadowRoot?.querySelector("vaadin-combo-box-light") as any)?.open();
|
||||
});
|
||||
}
|
||||
|
||||
public focus() {
|
||||
this.updateComplete.then(() => {
|
||||
this.shadowRoot?.querySelector("paper-input")?.focus();
|
||||
});
|
||||
}
|
||||
|
||||
public hassSubscribe(): UnsubscribeFunc[] {
|
||||
return [
|
||||
subscribeDeviceRegistry(this.hass.connection!, (devices) => {
|
||||
@@ -269,33 +232,25 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
];
|
||||
}
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
if (
|
||||
(!this._init && this.devices && this.areas && this.entities) ||
|
||||
(changedProps.has("_opened") && this._opened)
|
||||
) {
|
||||
this._init = true;
|
||||
(this._comboBox as any).items = this._getDevices(
|
||||
this.devices!,
|
||||
this.areas!,
|
||||
this.entities!,
|
||||
this.includeDomains,
|
||||
this.excludeDomains,
|
||||
this.includeDeviceClasses,
|
||||
this.deviceFilter
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this.devices || !this.areas || !this.entities) {
|
||||
return html``;
|
||||
}
|
||||
const devices = this._getDevices(
|
||||
this.devices,
|
||||
this.areas,
|
||||
this.entities,
|
||||
this.includeDomains,
|
||||
this.excludeDomains,
|
||||
this.includeDeviceClasses,
|
||||
this.deviceFilter
|
||||
);
|
||||
return html`
|
||||
<vaadin-combo-box-light
|
||||
item-value-path="id"
|
||||
item-id-path="id"
|
||||
item-label-path="name"
|
||||
.items=${devices}
|
||||
.value=${this._value}
|
||||
.renderer=${rowRenderer}
|
||||
@opened-changed=${this._openedChanged}
|
||||
@@ -313,30 +268,34 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
>
|
||||
${this.value
|
||||
? html`
|
||||
<mwc-icon-button
|
||||
.label=${this.hass.localize(
|
||||
<ha-icon-button
|
||||
aria-label=${this.hass.localize(
|
||||
"ui.components.device-picker.clear"
|
||||
)}
|
||||
slot="suffix"
|
||||
class="clear-button"
|
||||
icon="hass:close"
|
||||
@click=${this._clearValue}
|
||||
no-ripple
|
||||
>
|
||||
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
Clear
|
||||
</ha-icon-button>
|
||||
`
|
||||
: ""}
|
||||
${devices.length > 0
|
||||
? html`
|
||||
<ha-icon-button
|
||||
aria-label=${this.hass.localize(
|
||||
"ui.components.device-picker.show_devices"
|
||||
)}
|
||||
slot="suffix"
|
||||
class="toggle-button"
|
||||
.icon=${this._opened ? "hass:menu-up" : "hass:menu-down"}
|
||||
>
|
||||
Toggle
|
||||
</ha-icon-button>
|
||||
`
|
||||
: ""}
|
||||
|
||||
<mwc-icon-button
|
||||
.label=${this.hass.localize(
|
||||
"ui.components.device-picker.show_devices"
|
||||
)}
|
||||
slot="suffix"
|
||||
class="toggle-button"
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${this._opened ? mdiMenuUp : mdiMenuDown}
|
||||
></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
</paper-input>
|
||||
</vaadin-combo-box-light>
|
||||
`;
|
||||
@@ -373,7 +332,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
paper-input > mwc-icon-button {
|
||||
paper-input > ha-icon-button {
|
||||
--mdc-icon-button-size: 24px;
|
||||
padding: 2px;
|
||||
color: var(--secondary-text-color);
|
||||
|
@@ -101,18 +101,6 @@ export class HaEntityPicker extends LitElement {
|
||||
|
||||
@query("vaadin-combo-box-light", true) private _comboBox!: HTMLElement;
|
||||
|
||||
public open() {
|
||||
this.updateComplete.then(() => {
|
||||
(this.shadowRoot?.querySelector("vaadin-combo-box-light") as any)?.open();
|
||||
});
|
||||
}
|
||||
|
||||
public focus() {
|
||||
this.updateComplete.then(() => {
|
||||
this.shadowRoot?.querySelector("paper-input")?.focus();
|
||||
});
|
||||
}
|
||||
|
||||
private _initedStates = false;
|
||||
|
||||
private _states: HassEntity[] = [];
|
||||
@@ -165,24 +153,6 @@ export class HaEntityPicker extends LitElement {
|
||||
);
|
||||
}
|
||||
|
||||
if (!states.length) {
|
||||
return [
|
||||
{
|
||||
entity_id: "",
|
||||
state: "",
|
||||
last_changed: "",
|
||||
last_updated: "",
|
||||
context: { id: "", user_id: null },
|
||||
attributes: {
|
||||
friendly_name: this.hass!.localize(
|
||||
"ui.components.entity.entity-picker.no_match"
|
||||
),
|
||||
icon: "mdi:magnify",
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
return states;
|
||||
}
|
||||
);
|
||||
@@ -233,6 +203,7 @@ export class HaEntityPicker extends LitElement {
|
||||
.label=${this.label === undefined
|
||||
? this.hass.localize("ui.components.entity.entity-picker.entity")
|
||||
: this.label}
|
||||
.value=${this._value}
|
||||
.disabled=${this.disabled}
|
||||
class="input"
|
||||
autocapitalize="none"
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import "./ha-svg-icon";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import "./ha-icon-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-item/paper-item-body";
|
||||
@@ -15,8 +14,6 @@ import {
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
PropertyValues,
|
||||
query,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import {
|
||||
@@ -43,7 +40,6 @@ import {
|
||||
} from "../data/entity_registry";
|
||||
import { computeDomain } from "../common/entity/compute_domain";
|
||||
import type { HaDevicePickerDeviceFilterFunc } from "./device/ha-device-picker";
|
||||
import { mdiClose, mdiMenuDown, mdiMenuUp } from "@mdi/js";
|
||||
|
||||
const rowRenderer = (
|
||||
root: HTMLElement,
|
||||
@@ -125,10 +121,6 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
|
||||
@internalProperty() private _opened?: boolean;
|
||||
|
||||
@query("vaadin-combo-box-light", true) private _comboBox!: HTMLElement;
|
||||
|
||||
private _init = false;
|
||||
|
||||
public hassSubscribe(): UnsubscribeFunc[] {
|
||||
return [
|
||||
subscribeAreaRegistry(this.hass.connection!, (areas) => {
|
||||
@@ -143,18 +135,6 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
];
|
||||
}
|
||||
|
||||
public open() {
|
||||
this.updateComplete.then(() => {
|
||||
(this.shadowRoot?.querySelector("vaadin-combo-box-light") as any)?.open();
|
||||
});
|
||||
}
|
||||
|
||||
public focus() {
|
||||
this.updateComplete.then(() => {
|
||||
this.shadowRoot?.querySelector("paper-input")?.focus();
|
||||
});
|
||||
}
|
||||
|
||||
private _getAreas = memoizeOne(
|
||||
(
|
||||
areas: AreaRegistryEntry[],
|
||||
@@ -167,15 +147,6 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
entityFilter: this["entityFilter"],
|
||||
noAdd: this["noAdd"]
|
||||
): AreaRegistryEntry[] => {
|
||||
if (!areas.length) {
|
||||
return [
|
||||
{
|
||||
area_id: "",
|
||||
name: this.hass.localize("ui.components.area-picker.no_areas"),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
const deviceEntityLookup: DeviceEntityLookup = {};
|
||||
let inputDevices: DeviceRegistryEntry[] | undefined;
|
||||
let inputEntities: EntityRegistryEntry[] | undefined;
|
||||
@@ -190,12 +161,12 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
deviceEntityLookup[entity.device_id].push(entity);
|
||||
}
|
||||
inputDevices = devices;
|
||||
inputEntities = entities.filter((entity) => entity.area_id);
|
||||
inputDevices = [...devices];
|
||||
inputEntities = entities.filter((entity) => !entity.device_id);
|
||||
} else if (deviceFilter) {
|
||||
inputDevices = devices;
|
||||
inputDevices = [...devices];
|
||||
} else if (entityFilter) {
|
||||
inputEntities = entities.filter((entity) => entity.area_id);
|
||||
inputEntities = entities.filter((entity) => !entity.device_id);
|
||||
}
|
||||
|
||||
if (includeDomains) {
|
||||
@@ -260,9 +231,7 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
|
||||
if (entityFilter) {
|
||||
inputEntities = inputEntities!.filter((entity) =>
|
||||
entityFilter!(entity)
|
||||
);
|
||||
entities = entities.filter((entity) => entityFilter!(entity));
|
||||
}
|
||||
|
||||
let outputAreas = areas;
|
||||
@@ -287,15 +256,6 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
outputAreas = areas.filter((area) => areaIds!.includes(area.area_id));
|
||||
}
|
||||
|
||||
if (!outputAreas.length) {
|
||||
outputAreas = [
|
||||
{
|
||||
area_id: "",
|
||||
name: this.hass.localize("ui.components.area-picker.no_match"),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
return noAdd
|
||||
? outputAreas
|
||||
: [
|
||||
@@ -308,35 +268,27 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
);
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
if (
|
||||
(!this._init && this._devices && this._areas && this._entities) ||
|
||||
(changedProps.has("_opened") && this._opened)
|
||||
) {
|
||||
this._init = true;
|
||||
(this._comboBox as any).items = this._getAreas(
|
||||
this._areas!,
|
||||
this._devices!,
|
||||
this._entities!,
|
||||
this.includeDomains,
|
||||
this.excludeDomains,
|
||||
this.includeDeviceClasses,
|
||||
this.deviceFilter,
|
||||
this.entityFilter,
|
||||
this.noAdd
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._devices || !this._areas || !this._entities) {
|
||||
return html``;
|
||||
}
|
||||
const areas = this._getAreas(
|
||||
this._areas,
|
||||
this._devices,
|
||||
this._entities,
|
||||
this.includeDomains,
|
||||
this.excludeDomains,
|
||||
this.includeDeviceClasses,
|
||||
this.deviceFilter,
|
||||
this.entityFilter,
|
||||
this.noAdd
|
||||
);
|
||||
return html`
|
||||
<vaadin-combo-box-light
|
||||
item-value-path="area_id"
|
||||
item-id-path="area_id"
|
||||
item-label-path="name"
|
||||
.items=${areas}
|
||||
.value=${this._value}
|
||||
.renderer=${rowRenderer}
|
||||
@opened-changed=${this._openedChanged}
|
||||
@@ -357,28 +309,34 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
>
|
||||
${this.value
|
||||
? html`
|
||||
<mwc-icon-button
|
||||
.label=${this.hass.localize(
|
||||
<ha-icon-button
|
||||
aria-label=${this.hass.localize(
|
||||
"ui.components.area-picker.clear"
|
||||
)}
|
||||
slot="suffix"
|
||||
class="clear-button"
|
||||
icon="hass:close"
|
||||
@click=${this._clearValue}
|
||||
no-ripple
|
||||
>
|
||||
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
${this.hass.localize("ui.components.area-picker.clear")}
|
||||
</ha-icon-button>
|
||||
`
|
||||
: ""}
|
||||
${areas.length > 0
|
||||
? html`
|
||||
<ha-icon-button
|
||||
aria-label=${this.hass.localize(
|
||||
"ui.components.area-picker.show_areas"
|
||||
)}
|
||||
slot="suffix"
|
||||
class="toggle-button"
|
||||
.icon=${this._opened ? "hass:menu-up" : "hass:menu-down"}
|
||||
>
|
||||
${this.hass.localize("ui.components.area-picker.toggle")}
|
||||
</ha-icon-button>
|
||||
`
|
||||
: ""}
|
||||
|
||||
<mwc-icon-button
|
||||
.label=${this.hass.localize("ui.components.area-picker.toggle")}
|
||||
slot="suffix"
|
||||
class="toggle-button"
|
||||
>
|
||||
<ha-svg-icon
|
||||
.path=${this._opened ? mdiMenuUp : mdiMenuDown}
|
||||
></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
</paper-input>
|
||||
</vaadin-combo-box-light>
|
||||
`;
|
||||
@@ -454,7 +412,7 @@ export class HaAreaPicker extends SubscribeMixin(LitElement) {
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
paper-input > mwc-icon-button {
|
||||
paper-input > ha-icon-button {
|
||||
--mdc-icon-button-size: 24px;
|
||||
padding: 2px;
|
||||
color: var(--secondary-text-color);
|
||||
|
@@ -52,7 +52,6 @@ class HaBluePrintPicker extends LitElement {
|
||||
.label=${this.label ||
|
||||
this.hass.localize("ui.components.blueprint-picker.label")}
|
||||
.disabled=${this.disabled}
|
||||
horizontal-align="left"
|
||||
>
|
||||
<paper-listbox
|
||||
slot="dropdown-content"
|
||||
@@ -111,9 +110,6 @@ class HaBluePrintPicker extends LitElement {
|
||||
paper-listbox {
|
||||
min-width: 200px;
|
||||
}
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@@ -127,7 +127,7 @@ class HaHLSPlayer extends LitElement {
|
||||
|
||||
// Parse playlist assuming it is a master playlist. Match group 1 is whether hevc, match group 2 is regular playlist url
|
||||
// See https://tools.ietf.org/html/rfc8216 for HLS spec details
|
||||
const playlistRegexp = /#EXT-X-STREAM-INF:.*?(?:CODECS=".*?(hev1|hvc1)?\..*?".*?)?(?:\n|\r\n)(.+)/g;
|
||||
const playlistRegexp = /#EXT-X-STREAM-INF:.*?(?:CODECS=".*?(?<isHevc>hev1|hvc1)?\..*?".*?)?(?:\n|\r\n)(?<streamUrl>.+)/g;
|
||||
const match = playlistRegexp.exec(masterPlaylist);
|
||||
const matchTwice = playlistRegexp.exec(masterPlaylist);
|
||||
|
||||
@@ -136,13 +136,17 @@ class HaHLSPlayer extends LitElement {
|
||||
let playlist_url: string;
|
||||
if (match !== null && matchTwice === null) {
|
||||
// Only send the regular playlist url if we match exactly once
|
||||
playlist_url = new URL(match[2], this.url).href;
|
||||
playlist_url = new URL(match.groups!.streamUrl, this.url).href;
|
||||
} else {
|
||||
playlist_url = this.url;
|
||||
}
|
||||
|
||||
// If codec is HEVC and ExoPlayer is supported, use ExoPlayer.
|
||||
if (this._useExoPlayer && match !== null && match[1] !== undefined) {
|
||||
if (
|
||||
this._useExoPlayer &&
|
||||
match !== null &&
|
||||
match.groups!.isHevc !== undefined
|
||||
) {
|
||||
this._renderHLSExoPlayer(playlist_url);
|
||||
} else if (hls.isSupported()) {
|
||||
this._renderHLSPolyfill(videoEl, hls, playlist_url);
|
||||
|
@@ -60,9 +60,8 @@ export class HaIconInput extends LitElement {
|
||||
static get styles() {
|
||||
return css`
|
||||
ha-icon {
|
||||
position: absolute;
|
||||
bottom: 2px;
|
||||
right: 0;
|
||||
position: relative;
|
||||
bottom: 4px;
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@ class HaLabeledSlider extends PolymerElement {
|
||||
<style>
|
||||
:host {
|
||||
display: block;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.title {
|
||||
@@ -29,7 +30,6 @@ class HaLabeledSlider extends PolymerElement {
|
||||
ha-slider {
|
||||
flex-grow: 1;
|
||||
background-image: var(--ha-slider-background);
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
@@ -13,7 +13,7 @@ import type { HomeAssistant } from "../types";
|
||||
class HaRelativeTime extends UpdatingElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@property({ attribute: false }) public datetime?: string | Date;
|
||||
@property({ attribute: false }) public datetime?: string;
|
||||
|
||||
private _interval?: number;
|
||||
|
||||
|
@@ -1,45 +0,0 @@
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { ActionSelector } from "../../data/selector";
|
||||
import { Action } from "../../data/script";
|
||||
import "../../panels/config/automation/action/ha-automation-action";
|
||||
|
||||
@customElement("ha-selector-action")
|
||||
export class HaActionSelector extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() public selector!: ActionSelector;
|
||||
|
||||
@property() public value?: Action;
|
||||
|
||||
@property() public label?: string;
|
||||
|
||||
protected render() {
|
||||
return html`<ha-automation-action
|
||||
.actions=${this.value || []}
|
||||
.hass=${this.hass}
|
||||
></ha-automation-action>`;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-automation-action {
|
||||
display: block;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-selector-action": HaActionSelector;
|
||||
}
|
||||
}
|
@@ -77,8 +77,7 @@ export class HaAreaSelector extends LitElement {
|
||||
}
|
||||
if (this.selector.area.device?.integration) {
|
||||
if (
|
||||
this._configEntries &&
|
||||
!this._configEntries.some((entry) =>
|
||||
!this._configEntries?.some((entry) =>
|
||||
device.config_entries.includes(entry.entry_id)
|
||||
)
|
||||
) {
|
||||
|
@@ -63,8 +63,7 @@ export class HaDeviceSelector extends LitElement {
|
||||
}
|
||||
if (this.selector.device.integration) {
|
||||
if (
|
||||
this._configEntries &&
|
||||
!this._configEntries.some((entry) =>
|
||||
!this._configEntries?.some((entry) =>
|
||||
device.config_entries.includes(entry.entry_id)
|
||||
)
|
||||
) {
|
||||
|
@@ -19,7 +19,7 @@ export class HaEntitySelector extends SubscribeMixin(LitElement) {
|
||||
|
||||
@property() public selector!: EntitySelector;
|
||||
|
||||
@internalProperty() private _entityPlaformLookup?: Record<string, string>;
|
||||
@internalProperty() private _entities?: Record<string, string>;
|
||||
|
||||
@property() public value?: any;
|
||||
|
||||
@@ -45,7 +45,7 @@ export class HaEntitySelector extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
entityLookup[confEnt.entity_id] = confEnt.platform;
|
||||
}
|
||||
this._entityPlaformLookup = entityLookup;
|
||||
this._entities = entityLookup;
|
||||
}),
|
||||
];
|
||||
}
|
||||
@@ -66,9 +66,8 @@ export class HaEntitySelector extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
if (this.selector.entity.integration) {
|
||||
if (
|
||||
!this._entityPlaformLookup ||
|
||||
this._entityPlaformLookup[entity.entity_id] !==
|
||||
this.selector.entity.integration
|
||||
!this._entities ||
|
||||
this._entities[entity.entity_id] !== this.selector.entity.integration
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
@@ -1,153 +0,0 @@
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { TargetSelector } from "../../data/selector";
|
||||
import { ConfigEntry, getConfigEntries } from "../../data/config_entries";
|
||||
import { DeviceRegistryEntry } from "../../data/device_registry";
|
||||
import "../ha-target-picker";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@material/mwc-list/mwc-list";
|
||||
import {
|
||||
EntityRegistryEntry,
|
||||
subscribeEntityRegistry,
|
||||
} from "../../data/entity_registry";
|
||||
import { Target } from "../../data/target";
|
||||
import "@material/mwc-tab-bar/mwc-tab-bar";
|
||||
import "@material/mwc-tab/mwc-tab";
|
||||
import { HassEntity, UnsubscribeFunc } from "home-assistant-js-websocket";
|
||||
import { SubscribeMixin } from "../../mixins/subscribe-mixin";
|
||||
|
||||
@customElement("ha-selector-target")
|
||||
export class HaTargetSelector extends SubscribeMixin(LitElement) {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() public selector!: TargetSelector;
|
||||
|
||||
@property() public value?: Target;
|
||||
|
||||
@property() public label?: string;
|
||||
|
||||
@internalProperty() private _entityPlaformLookup?: Record<string, string>;
|
||||
|
||||
@internalProperty() private _configEntries?: ConfigEntry[];
|
||||
|
||||
public hassSubscribe(): UnsubscribeFunc[] {
|
||||
return [
|
||||
subscribeEntityRegistry(this.hass.connection!, (entities) => {
|
||||
const entityLookup = {};
|
||||
for (const confEnt of entities) {
|
||||
if (!confEnt.platform) {
|
||||
continue;
|
||||
}
|
||||
entityLookup[confEnt.entity_id] = confEnt.platform;
|
||||
}
|
||||
this._entityPlaformLookup = entityLookup;
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
protected updated(changedProperties) {
|
||||
if (changedProperties.has("selector")) {
|
||||
const oldSelector = changedProperties.get("selector");
|
||||
if (
|
||||
oldSelector !== this.selector &&
|
||||
this.selector.target.device?.integration
|
||||
) {
|
||||
this._loadConfigEntries();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected render() {
|
||||
return html`<ha-target-picker
|
||||
.hass=${this.hass}
|
||||
.value=${this.value}
|
||||
.deviceFilter=${(device) => this._filterDevices(device)}
|
||||
.entityRegFilter=${(entity: EntityRegistryEntry) =>
|
||||
this._filterRegEntities(entity)}
|
||||
.entityFilter=${(entity: HassEntity) => this._filterEntities(entity)}
|
||||
.includeDeviceClasses=${this.selector.target.entity?.device_class
|
||||
? [this.selector.target.entity.device_class]
|
||||
: undefined}
|
||||
.includeDomains=${this.selector.target.entity?.domain
|
||||
? [this.selector.target.entity.domain]
|
||||
: undefined}
|
||||
></ha-target-picker>`;
|
||||
}
|
||||
|
||||
private _filterEntities(entity: HassEntity): boolean {
|
||||
if (this.selector.target.entity?.integration) {
|
||||
if (
|
||||
!this._entityPlaformLookup ||
|
||||
this._entityPlaformLookup[entity.entity_id] !==
|
||||
this.selector.target.entity.integration
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private _filterRegEntities(entity: EntityRegistryEntry): boolean {
|
||||
if (this.selector.target.entity?.integration) {
|
||||
if (entity.platform !== this.selector.target.entity.integration) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private _filterDevices(device: DeviceRegistryEntry): boolean {
|
||||
if (
|
||||
this.selector.target.device?.manufacturer &&
|
||||
device.manufacturer !== this.selector.target.device.manufacturer
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
this.selector.target.device?.model &&
|
||||
device.model !== this.selector.target.device.model
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (this.selector.target.device?.integration) {
|
||||
if (
|
||||
!this._configEntries?.some((entry) =>
|
||||
device.config_entries.includes(entry.entry_id)
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private async _loadConfigEntries() {
|
||||
this._configEntries = (await getConfigEntries(this.hass)).filter(
|
||||
(entry) => entry.domain === this.selector.target.device?.integration
|
||||
);
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-target-picker {
|
||||
margin: 0 -8px;
|
||||
display: block;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-selector-target": HaTargetSelector;
|
||||
}
|
||||
}
|
@@ -5,11 +5,9 @@ import { HomeAssistant } from "../../types";
|
||||
import "./ha-selector-entity";
|
||||
import "./ha-selector-device";
|
||||
import "./ha-selector-area";
|
||||
import "./ha-selector-target";
|
||||
import "./ha-selector-number";
|
||||
import "./ha-selector-boolean";
|
||||
import "./ha-selector-time";
|
||||
import "./ha-selector-action";
|
||||
import { Selector } from "../../data/selector";
|
||||
|
||||
@customElement("ha-selector")
|
||||
|
@@ -18,6 +18,11 @@ export class HaSettingsRow extends LitElement {
|
||||
|
||||
protected render(): SVGTemplateResult {
|
||||
return html`
|
||||
<style>
|
||||
paper-item-body {
|
||||
padding-right: 16px;
|
||||
}
|
||||
</style>
|
||||
<paper-item-body
|
||||
?two-line=${!this.threeLine}
|
||||
?three-line=${this.threeLine}
|
||||
@@ -38,14 +43,6 @@ export class HaSettingsRow extends LitElement {
|
||||
align-self: auto;
|
||||
align-items: center;
|
||||
}
|
||||
paper-item-body {
|
||||
padding: 8px 16px 8px 0;
|
||||
}
|
||||
paper-item-body[two-line] {
|
||||
min-height: calc(
|
||||
var(--paper-item-body-two-line-min-height, 72px) - 16px
|
||||
);
|
||||
}
|
||||
:host([narrow]) {
|
||||
align-items: normal;
|
||||
flex-direction: column;
|
||||
@@ -55,9 +52,6 @@ export class HaSettingsRow extends LitElement {
|
||||
::slotted(ha-switch) {
|
||||
padding: 16px 0;
|
||||
}
|
||||
div[secondary] {
|
||||
white-space: normal;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@@ -1,605 +0,0 @@
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
query,
|
||||
unsafeCSS,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../types";
|
||||
// @ts-ignore
|
||||
import chipStyles from "@material/chips/dist/mdc.chips.min.css";
|
||||
import {
|
||||
mdiSofa,
|
||||
mdiDevices,
|
||||
mdiClose,
|
||||
mdiPlus,
|
||||
mdiUnfoldMoreVertical,
|
||||
} from "@mdi/js";
|
||||
import "./ha-svg-icon";
|
||||
import "./ha-icon";
|
||||
import "@material/mwc-icon-button/mwc-icon-button";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import { UnsubscribeFunc } from "home-assistant-js-websocket";
|
||||
import {
|
||||
AreaRegistryEntry,
|
||||
subscribeAreaRegistry,
|
||||
} from "../data/area_registry";
|
||||
import {
|
||||
computeDeviceName,
|
||||
DeviceRegistryEntry,
|
||||
subscribeDeviceRegistry,
|
||||
} from "../data/device_registry";
|
||||
import {
|
||||
EntityRegistryEntry,
|
||||
subscribeEntityRegistry,
|
||||
} from "../data/entity_registry";
|
||||
import { SubscribeMixin } from "../mixins/subscribe-mixin";
|
||||
import { computeStateName } from "../common/entity/compute_state_name";
|
||||
import { stateIcon } from "../common/entity/state_icon";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import type { HaDevicePickerDeviceFilterFunc } from "./device/ha-device-picker";
|
||||
import { computeDomain } from "../common/entity/compute_domain";
|
||||
import { Target } from "../data/target";
|
||||
import { ensureArray } from "../common/ensure-array";
|
||||
import "./entity/ha-entity-picker";
|
||||
import "./device/ha-device-picker";
|
||||
import "./ha-area-picker";
|
||||
import type { HaEntityPickerEntityFilterFunc } from "./entity/ha-entity-picker";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
|
||||
@customElement("ha-target-picker")
|
||||
export class HaTargetPicker extends SubscribeMixin(LitElement) {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() public value?: Target;
|
||||
|
||||
@property() public label?: string;
|
||||
|
||||
/**
|
||||
* Show only targets with entities from specific domains.
|
||||
* @type {Array}
|
||||
* @attr include-domains
|
||||
*/
|
||||
@property({ type: Array, attribute: "include-domains" })
|
||||
public includeDomains?: string[];
|
||||
|
||||
/**
|
||||
* Show only targets with entities of these device classes.
|
||||
* @type {Array}
|
||||
* @attr include-device-classes
|
||||
*/
|
||||
@property({ type: Array, attribute: "include-device-classes" })
|
||||
public includeDeviceClasses?: string[];
|
||||
|
||||
@property() public deviceFilter?: HaDevicePickerDeviceFilterFunc;
|
||||
|
||||
@property() public entityRegFilter?: (entity: EntityRegistryEntry) => boolean;
|
||||
|
||||
@property() public entityFilter?: HaEntityPickerEntityFilterFunc;
|
||||
|
||||
@internalProperty() private _areas?: { [areaId: string]: AreaRegistryEntry };
|
||||
|
||||
@internalProperty() private _devices?: {
|
||||
[deviceId: string]: DeviceRegistryEntry;
|
||||
};
|
||||
|
||||
@internalProperty() private _entities?: EntityRegistryEntry[];
|
||||
|
||||
@internalProperty() private _addMode?: "area_id" | "entity_id" | "device_id";
|
||||
|
||||
@query("#input") private _inputElement?;
|
||||
|
||||
public hassSubscribe(): UnsubscribeFunc[] {
|
||||
return [
|
||||
subscribeAreaRegistry(this.hass.connection!, (areas) => {
|
||||
const areaLookup: { [areaId: string]: AreaRegistryEntry } = {};
|
||||
for (const area of areas) {
|
||||
areaLookup[area.area_id] = area;
|
||||
}
|
||||
this._areas = areaLookup;
|
||||
}),
|
||||
subscribeDeviceRegistry(this.hass.connection!, (devices) => {
|
||||
const deviceLookup: { [deviceId: string]: DeviceRegistryEntry } = {};
|
||||
for (const device of devices) {
|
||||
deviceLookup[device.id] = device;
|
||||
}
|
||||
this._devices = deviceLookup;
|
||||
}),
|
||||
subscribeEntityRegistry(this.hass.connection!, (entities) => {
|
||||
this._entities = entities;
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
protected render() {
|
||||
if (!this._areas || !this._devices || !this._entities) {
|
||||
return html``;
|
||||
}
|
||||
return html`<div class="mdc-chip-set items">
|
||||
${ensureArray(this.value?.area_id)?.map((area_id) => {
|
||||
const area = this._areas![area_id];
|
||||
return this._renderChip(
|
||||
"area_id",
|
||||
area_id,
|
||||
area?.name || area_id,
|
||||
undefined,
|
||||
mdiSofa
|
||||
);
|
||||
})}
|
||||
${ensureArray(this.value?.device_id)?.map((device_id) => {
|
||||
const device = this._devices![device_id];
|
||||
return this._renderChip(
|
||||
"device_id",
|
||||
device_id,
|
||||
device ? computeDeviceName(device, this.hass) : device_id,
|
||||
undefined,
|
||||
mdiDevices
|
||||
);
|
||||
})}
|
||||
${ensureArray(this.value?.entity_id)?.map((entity_id) => {
|
||||
const entity = this.hass.states[entity_id];
|
||||
return this._renderChip(
|
||||
"entity_id",
|
||||
entity_id,
|
||||
entity ? computeStateName(entity) : entity_id,
|
||||
entity ? stateIcon(entity) : undefined
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
${this._renderPicker()}
|
||||
<div class="mdc-chip-set">
|
||||
<div
|
||||
class="mdc-chip area_id add"
|
||||
.type=${"area_id"}
|
||||
@click=${this._showPicker}
|
||||
>
|
||||
<div class="mdc-chip__ripple"></div>
|
||||
<ha-svg-icon
|
||||
class="mdc-chip__icon mdc-chip__icon--leading"
|
||||
.path=${mdiPlus}
|
||||
></ha-svg-icon>
|
||||
<span role="gridcell">
|
||||
<span role="button" tabindex="0" class="mdc-chip__primary-action">
|
||||
<span class="mdc-chip__text"
|
||||
>${this.hass.localize(
|
||||
"ui.components.target-picker.add_area_id"
|
||||
)}</span
|
||||
>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="mdc-chip device_id add"
|
||||
.type=${"device_id"}
|
||||
@click=${this._showPicker}
|
||||
>
|
||||
<div class="mdc-chip__ripple"></div>
|
||||
<ha-svg-icon
|
||||
class="mdc-chip__icon mdc-chip__icon--leading"
|
||||
.path=${mdiPlus}
|
||||
></ha-svg-icon>
|
||||
<span role="gridcell">
|
||||
<span role="button" tabindex="0" class="mdc-chip__primary-action">
|
||||
<span class="mdc-chip__text"
|
||||
>${this.hass.localize(
|
||||
"ui.components.target-picker.add_device_id"
|
||||
)}</span
|
||||
>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="mdc-chip entity_id add"
|
||||
.type=${"entity_id"}
|
||||
@click=${this._showPicker}
|
||||
>
|
||||
<div class="mdc-chip__ripple"></div>
|
||||
<ha-svg-icon
|
||||
class="mdc-chip__icon mdc-chip__icon--leading"
|
||||
.path=${mdiPlus}
|
||||
></ha-svg-icon>
|
||||
<span role="gridcell">
|
||||
<span role="button" tabindex="0" class="mdc-chip__primary-action">
|
||||
<span class="mdc-chip__text"
|
||||
>${this.hass.localize(
|
||||
"ui.components.target-picker.add_entity_id"
|
||||
)}</span
|
||||
>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
private async _showPicker(ev) {
|
||||
this._addMode = ev.currentTarget.type;
|
||||
await this.updateComplete;
|
||||
setTimeout(() => {
|
||||
this._inputElement?.open();
|
||||
this._inputElement?.focus();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
private _renderChip(
|
||||
type: string,
|
||||
id: string,
|
||||
name: string,
|
||||
icon?: string,
|
||||
iconPath?: string
|
||||
) {
|
||||
return html`
|
||||
<div
|
||||
class="mdc-chip ${classMap({
|
||||
[type]: true,
|
||||
})}"
|
||||
>
|
||||
${iconPath
|
||||
? html`<ha-svg-icon
|
||||
class="mdc-chip__icon mdc-chip__icon--leading"
|
||||
.path=${iconPath}
|
||||
></ha-svg-icon>`
|
||||
: ""}
|
||||
${icon
|
||||
? html`<ha-icon
|
||||
class="mdc-chip__icon mdc-chip__icon--leading"
|
||||
.icon=${icon}
|
||||
></ha-icon>`
|
||||
: ""}
|
||||
<span role="gridcell">
|
||||
<span role="button" tabindex="0" class="mdc-chip__primary-action">
|
||||
<span class="mdc-chip__text">${name}</span>
|
||||
</span>
|
||||
</span>
|
||||
${type === "entity_id"
|
||||
? ""
|
||||
: html` <span role="gridcell">
|
||||
<mwc-icon-button
|
||||
class="expand-btn mdc-chip__icon mdc-chip__icon--trailing"
|
||||
tabindex="-1"
|
||||
role="button"
|
||||
.label=${"Expand"}
|
||||
.id=${id}
|
||||
.type=${type}
|
||||
@click=${this._handleExpand}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiUnfoldMoreVertical}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<paper-tooltip class="expand" animation-delay="0"
|
||||
>${this.hass.localize(
|
||||
`ui.components.target-picker.expand_${type}`
|
||||
)}</paper-tooltip
|
||||
>
|
||||
</span>`}
|
||||
<span role="gridcell">
|
||||
<mwc-icon-button
|
||||
class="mdc-chip__icon mdc-chip__icon--trailing"
|
||||
tabindex="-1"
|
||||
role="button"
|
||||
.label=${"Remove"}
|
||||
.id=${id}
|
||||
.type=${type}
|
||||
@click=${this._handleRemove}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<paper-tooltip animation-delay="0"
|
||||
>${this.hass.localize(
|
||||
`ui.components.target-picker.remove_${type}`
|
||||
)}</paper-tooltip
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
private _renderPicker() {
|
||||
switch (this._addMode) {
|
||||
case "area_id":
|
||||
return html`<ha-area-picker
|
||||
.hass=${this.hass}
|
||||
id="input"
|
||||
.type=${"area_id"}
|
||||
.label=${this.hass.localize(
|
||||
"ui.components.target-picker.add_area_id"
|
||||
)}
|
||||
no-add
|
||||
.deviceFilter=${this.deviceFilter}
|
||||
.entityFilter=${this.entityRegFilter}
|
||||
.includeDeviceClasses=${this.includeDeviceClasses}
|
||||
.includeDomains=${this.includeDomains}
|
||||
@value-changed=${this._targetPicked}
|
||||
></ha-area-picker>`;
|
||||
case "device_id":
|
||||
return html`<ha-device-picker
|
||||
.hass=${this.hass}
|
||||
id="input"
|
||||
.type=${"device_id"}
|
||||
.label=${this.hass.localize(
|
||||
"ui.components.target-picker.add_device_id"
|
||||
)}
|
||||
.deviceFilter=${this.deviceFilter}
|
||||
.entityFilter=${this.entityRegFilter}
|
||||
.includeDeviceClasses=${this.includeDeviceClasses}
|
||||
.includeDomains=${this.includeDomains}
|
||||
@value-changed=${this._targetPicked}
|
||||
></ha-device-picker>`;
|
||||
case "entity_id":
|
||||
return html`<ha-entity-picker
|
||||
.hass=${this.hass}
|
||||
id="input"
|
||||
.type=${"entity_id"}
|
||||
.label=${this.hass.localize(
|
||||
"ui.components.target-picker.add_entity_id"
|
||||
)}
|
||||
.entityFilter=${this.entityFilter}
|
||||
.includeDeviceClasses=${this.includeDeviceClasses}
|
||||
.includeDomains=${this.includeDomains}
|
||||
@value-changed=${this._targetPicked}
|
||||
></ha-entity-picker>`;
|
||||
}
|
||||
return html``;
|
||||
}
|
||||
|
||||
private _targetPicked(ev) {
|
||||
ev.stopPropagation();
|
||||
if (!ev.detail.value) {
|
||||
return;
|
||||
}
|
||||
const value = ev.detail.value;
|
||||
const target = ev.currentTarget;
|
||||
target.value = "";
|
||||
this._addMode = undefined;
|
||||
fireEvent(this, "value-changed", {
|
||||
value: this.value
|
||||
? {
|
||||
...this.value,
|
||||
[target.type]: this.value[target.type]
|
||||
? [...ensureArray(this.value[target.type]), value]
|
||||
: value,
|
||||
}
|
||||
: { [target.type]: value },
|
||||
});
|
||||
}
|
||||
|
||||
private _handleExpand(ev) {
|
||||
const target = ev.currentTarget as any;
|
||||
const newDevices: string[] = [];
|
||||
const newEntities: string[] = [];
|
||||
if (target.type === "area_id") {
|
||||
Object.values(this._devices!).forEach((device) => {
|
||||
if (
|
||||
device.area_id === target.id &&
|
||||
!this.value!.device_id?.includes(device.id) &&
|
||||
this._deviceMeetsFilter(device)
|
||||
) {
|
||||
newDevices.push(device.id);
|
||||
}
|
||||
});
|
||||
this._entities!.forEach((entity) => {
|
||||
if (
|
||||
entity.area_id === target.id &&
|
||||
!this.value!.entity_id?.includes(entity.entity_id) &&
|
||||
this._entityRegMeetsFilter(entity)
|
||||
) {
|
||||
newEntities.push(entity.entity_id);
|
||||
}
|
||||
});
|
||||
} else if (target.type === "device_id") {
|
||||
this._entities!.forEach((entity) => {
|
||||
if (
|
||||
entity.device_id === target.id &&
|
||||
!this.value!.entity_id?.includes(entity.entity_id) &&
|
||||
this._entityRegMeetsFilter(entity)
|
||||
) {
|
||||
newEntities.push(entity.entity_id);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
let value = this.value;
|
||||
if (newEntities.length) {
|
||||
value = this._addItems(value, "entity_id", newEntities);
|
||||
}
|
||||
if (newDevices.length) {
|
||||
value = this._addItems(value, "device_id", newDevices);
|
||||
}
|
||||
value = this._removeItem(value, target.type, target.id);
|
||||
fireEvent(this, "value-changed", { value });
|
||||
}
|
||||
|
||||
private _handleRemove(ev) {
|
||||
const target = ev.currentTarget as any;
|
||||
fireEvent(this, "value-changed", {
|
||||
value: this._removeItem(this.value, target.type, target.id),
|
||||
});
|
||||
}
|
||||
|
||||
private _addItems(
|
||||
value: this["value"],
|
||||
type: string,
|
||||
ids: string[]
|
||||
): this["value"] {
|
||||
return {
|
||||
...value,
|
||||
[type]: value![type] ? ensureArray(value![type])!.concat(ids) : ids,
|
||||
};
|
||||
}
|
||||
|
||||
private _removeItem(
|
||||
value: this["value"],
|
||||
type: string,
|
||||
id: string
|
||||
): this["value"] {
|
||||
const newVal = ensureArray(value![type])!.filter((val) => val !== id);
|
||||
if (newVal.length) {
|
||||
return {
|
||||
...value,
|
||||
[type]: newVal,
|
||||
};
|
||||
}
|
||||
const val = { ...value }!;
|
||||
delete val[type];
|
||||
if (Object.keys(val).length) {
|
||||
return val;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private _deviceMeetsFilter(device: DeviceRegistryEntry): boolean {
|
||||
const devEntities = this._entities?.filter(
|
||||
(entity) => entity.device_id === device.id
|
||||
);
|
||||
if (this.includeDomains) {
|
||||
if (!devEntities || !devEntities.length) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
!devEntities.some((entity) =>
|
||||
this.includeDomains!.includes(computeDomain(entity.entity_id))
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.includeDeviceClasses) {
|
||||
if (!devEntities || !devEntities.length) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
!devEntities.some((entity) => {
|
||||
const stateObj = this.hass.states[entity.entity_id];
|
||||
if (!stateObj) {
|
||||
return false;
|
||||
}
|
||||
return (
|
||||
stateObj.attributes.device_class &&
|
||||
this.includeDeviceClasses!.includes(
|
||||
stateObj.attributes.device_class
|
||||
)
|
||||
);
|
||||
})
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.deviceFilter) {
|
||||
return this.deviceFilter(device);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private _entityRegMeetsFilter(entity: EntityRegistryEntry): boolean {
|
||||
if (
|
||||
this.includeDomains &&
|
||||
!this.includeDomains.includes(computeDomain(entity.entity_id))
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (this.includeDeviceClasses) {
|
||||
const stateObj = this.hass.states[entity.entity_id];
|
||||
if (!stateObj) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
!stateObj.attributes.device_class ||
|
||||
!this.includeDeviceClasses!.includes(stateObj.attributes.device_class)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (this.entityRegFilter) {
|
||||
return this.entityRegFilter(entity);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
${unsafeCSS(chipStyles)}
|
||||
.mdc-chip {
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
.items {
|
||||
z-index: 2;
|
||||
}
|
||||
.mdc-chip.add {
|
||||
color: rgba(0, 0, 0, 0.87);
|
||||
}
|
||||
.mdc-chip:not(.add) {
|
||||
cursor: default;
|
||||
}
|
||||
.mdc-chip mwc-icon-button {
|
||||
--mdc-icon-button-size: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
outline: none;
|
||||
}
|
||||
.mdc-chip mwc-icon-button ha-svg-icon {
|
||||
border-radius: 50%;
|
||||
background: var(--secondary-text-color);
|
||||
}
|
||||
.mdc-chip__icon.mdc-chip__icon--trailing {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
--mdc-icon-size: 14px;
|
||||
color: var(--card-background-color);
|
||||
}
|
||||
.mdc-chip__icon--leading {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
--mdc-icon-size: 20px;
|
||||
border-radius: 50%;
|
||||
padding: 6px;
|
||||
margin-left: -14px !important;
|
||||
}
|
||||
.expand-btn {
|
||||
margin-right: 0;
|
||||
}
|
||||
.mdc-chip.area_id:not(.add) {
|
||||
border: 2px solid #fed6a4;
|
||||
background: var(--card-background-color);
|
||||
}
|
||||
.mdc-chip.area_id:not(.add) .mdc-chip__icon--leading,
|
||||
.mdc-chip.area_id.add {
|
||||
background: #fed6a4;
|
||||
}
|
||||
.mdc-chip.device_id:not(.add) {
|
||||
border: 2px solid #a8e1fb;
|
||||
background: var(--card-background-color);
|
||||
}
|
||||
.mdc-chip.device_id:not(.add) .mdc-chip__icon--leading,
|
||||
.mdc-chip.device_id.add {
|
||||
background: #a8e1fb;
|
||||
}
|
||||
.mdc-chip.entity_id:not(.add) {
|
||||
border: 2px solid #d2e7b9;
|
||||
background: var(--card-background-color);
|
||||
}
|
||||
.mdc-chip.entity_id:not(.add) .mdc-chip__icon--leading,
|
||||
.mdc-chip.entity_id.add {
|
||||
background: #d2e7b9;
|
||||
}
|
||||
.mdc-chip:hover {
|
||||
z-index: 5;
|
||||
}
|
||||
paper-tooltip.expand {
|
||||
min-width: 200px;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-target-picker": HaTargetPicker;
|
||||
}
|
||||
}
|
@@ -6,7 +6,7 @@ import { navigate } from "../common/navigate";
|
||||
import { Context, HomeAssistant } from "../types";
|
||||
import { BlueprintInput } from "./blueprint";
|
||||
import { DeviceCondition, DeviceTrigger } from "./device_automation";
|
||||
import { Action, MODES } from "./script";
|
||||
import { Action } from "./script";
|
||||
|
||||
export interface AutomationEntity extends HassEntityBase {
|
||||
attributes: HassEntityAttributeBase & {
|
||||
@@ -26,7 +26,7 @@ export interface ManualAutomationConfig {
|
||||
trigger: Trigger[];
|
||||
condition?: Condition[];
|
||||
action: Action[];
|
||||
mode?: typeof MODES[number];
|
||||
mode?: "single" | "restart" | "queued" | "parallel";
|
||||
max?: number;
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,6 @@ export interface DeviceRegistryEntry {
|
||||
area_id?: string;
|
||||
name_by_user?: string;
|
||||
entry_type: "service" | null;
|
||||
disabled_by: string | null;
|
||||
}
|
||||
|
||||
export interface DeviceEntityLookup {
|
||||
@@ -27,7 +26,6 @@ export interface DeviceEntityLookup {
|
||||
export interface DeviceRegistryEntryMutableParams {
|
||||
area_id?: string | null;
|
||||
name_by_user?: string | null;
|
||||
disabled_by?: string | null;
|
||||
}
|
||||
|
||||
export const fallbackDeviceName = (
|
||||
|
@@ -124,17 +124,13 @@ export const getLogbookMessage = (
|
||||
switch (domain) {
|
||||
case "device_tracker":
|
||||
case "person":
|
||||
if (state === "not_home") {
|
||||
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`);
|
||||
}
|
||||
if (state === "home") {
|
||||
return hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_home`);
|
||||
}
|
||||
return hass.localize(
|
||||
`${LOGBOOK_LOCALIZE_PATH}.was_at_state`,
|
||||
"state",
|
||||
state
|
||||
);
|
||||
return state === "not_home"
|
||||
? hass.localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`)
|
||||
: hass.localize(
|
||||
`${LOGBOOK_LOCALIZE_PATH}.was_at_state`,
|
||||
"state",
|
||||
state
|
||||
);
|
||||
|
||||
case "sun":
|
||||
return state === "above_horizon"
|
||||
|
@@ -7,13 +7,13 @@ import { navigate } from "../common/navigate";
|
||||
import { HomeAssistant } from "../types";
|
||||
import { Condition, Trigger } from "./automation";
|
||||
|
||||
export const MODES = ["single", "restart", "queued", "parallel"] as const;
|
||||
export const MODES = ["single", "restart", "queued", "parallel"];
|
||||
export const MODES_MAX = ["queued", "parallel"];
|
||||
|
||||
export interface ScriptEntity extends HassEntityBase {
|
||||
attributes: HassEntityAttributeBase & {
|
||||
last_triggered: string;
|
||||
mode: typeof MODES[number];
|
||||
mode: "single" | "restart" | "queued" | "parallel";
|
||||
current?: number;
|
||||
max?: number;
|
||||
};
|
||||
@@ -23,7 +23,7 @@ export interface ScriptConfig {
|
||||
alias: string;
|
||||
sequence: Action[];
|
||||
icon?: string;
|
||||
mode?: typeof MODES[number];
|
||||
mode?: "single" | "restart" | "queued" | "parallel";
|
||||
max?: number;
|
||||
}
|
||||
|
||||
|
@@ -2,11 +2,9 @@ export type Selector =
|
||||
| EntitySelector
|
||||
| DeviceSelector
|
||||
| AreaSelector
|
||||
| TargetSelector
|
||||
| NumberSelector
|
||||
| BooleanSelector
|
||||
| TimeSelector
|
||||
| ActionSelector;
|
||||
| TimeSelector;
|
||||
|
||||
export interface EntitySelector {
|
||||
entity: {
|
||||
@@ -43,21 +41,6 @@ export interface AreaSelector {
|
||||
};
|
||||
}
|
||||
|
||||
export interface TargetSelector {
|
||||
target: {
|
||||
entity?: {
|
||||
integration?: EntitySelector["entity"]["integration"];
|
||||
domain?: EntitySelector["entity"]["domain"];
|
||||
device_class?: EntitySelector["entity"]["device_class"];
|
||||
};
|
||||
device?: {
|
||||
integration?: DeviceSelector["device"]["integration"];
|
||||
manufacturer?: DeviceSelector["device"]["manufacturer"];
|
||||
model?: DeviceSelector["device"]["model"];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
export interface NumberSelector {
|
||||
number: {
|
||||
min: number;
|
||||
@@ -77,8 +60,3 @@ export interface TimeSelector {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||
time: {};
|
||||
}
|
||||
|
||||
export interface ActionSelector {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||
action: {};
|
||||
}
|
||||
|
@@ -1,5 +0,0 @@
|
||||
export interface Target {
|
||||
entity_id?: string[];
|
||||
device_id?: string[];
|
||||
area_id?: string[];
|
||||
}
|
@@ -20,7 +20,6 @@ export interface User {
|
||||
|
||||
export interface UpdateUserParams {
|
||||
name?: User["name"];
|
||||
is_active?: User["is_active"];
|
||||
group_ids?: User["group_ids"];
|
||||
}
|
||||
|
||||
|
@@ -17,17 +17,17 @@ import "../../components/ha-switch";
|
||||
import { PolymerChangedEvent } from "../../polymer-types";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { DialogBoxParams } from "./show-dialog-box";
|
||||
import { DialogParams } from "./show-dialog-box";
|
||||
|
||||
@customElement("dialog-box")
|
||||
class DialogBox extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@internalProperty() private _params?: DialogBoxParams;
|
||||
@internalProperty() private _params?: DialogParams;
|
||||
|
||||
@internalProperty() private _value?: string;
|
||||
|
||||
public async showDialog(params: DialogBoxParams): Promise<void> {
|
||||
public async showDialog(params: DialogParams): Promise<void> {
|
||||
this._params = params;
|
||||
if (params.prompt) {
|
||||
this._value = params.defaultValue;
|
||||
@@ -55,8 +55,8 @@ class DialogBox extends LitElement {
|
||||
return html`
|
||||
<ha-dialog
|
||||
open
|
||||
?scrimClickAction=${confirmPrompt}
|
||||
?escapeKeyAction=${confirmPrompt}
|
||||
?scrimClickAction=${this._params.prompt}
|
||||
?escapeKeyAction=${this._params.prompt}
|
||||
@closed=${this._dialogClosed}
|
||||
defaultAction="ignore"
|
||||
.heading=${this._params.title
|
||||
@@ -140,10 +140,10 @@ class DialogBox extends LitElement {
|
||||
}
|
||||
|
||||
private _dialogClosed(ev) {
|
||||
if (this._params?.prompt && ev.detail.action === "ignore") {
|
||||
if (ev.detail.action === "ignore") {
|
||||
return;
|
||||
}
|
||||
this._dismiss();
|
||||
this.closeDialog();
|
||||
}
|
||||
|
||||
private _close(): void {
|
||||
|
@@ -1,31 +1,31 @@
|
||||
import { TemplateResult } from "lit-html";
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
|
||||
interface BaseDialogBoxParams {
|
||||
interface BaseDialogParams {
|
||||
confirmText?: string;
|
||||
text?: string | TemplateResult;
|
||||
title?: string;
|
||||
warning?: boolean;
|
||||
}
|
||||
|
||||
export interface AlertDialogParams extends BaseDialogBoxParams {
|
||||
export interface AlertDialogParams extends BaseDialogParams {
|
||||
confirm?: () => void;
|
||||
}
|
||||
|
||||
export interface ConfirmationDialogParams extends BaseDialogBoxParams {
|
||||
export interface ConfirmationDialogParams extends BaseDialogParams {
|
||||
dismissText?: string;
|
||||
confirm?: () => void;
|
||||
cancel?: () => void;
|
||||
}
|
||||
|
||||
export interface PromptDialogParams extends BaseDialogBoxParams {
|
||||
export interface PromptDialogParams extends BaseDialogParams {
|
||||
inputLabel?: string;
|
||||
inputType?: string;
|
||||
defaultValue?: string;
|
||||
confirm?: (out?: string) => void;
|
||||
}
|
||||
|
||||
export interface DialogBoxParams
|
||||
export interface DialogParams
|
||||
extends ConfirmationDialogParams,
|
||||
PromptDialogParams {
|
||||
confirm?: (out?: string) => void;
|
||||
@@ -37,10 +37,10 @@ export const loadGenericDialog = () => import("./dialog-box");
|
||||
|
||||
const showDialogHelper = (
|
||||
element: HTMLElement,
|
||||
dialogParams: DialogBoxParams,
|
||||
dialogParams: DialogParams,
|
||||
extra?: {
|
||||
confirmation?: DialogBoxParams["confirmation"];
|
||||
prompt?: DialogBoxParams["prompt"];
|
||||
confirmation?: DialogParams["confirmation"];
|
||||
prompt?: DialogParams["prompt"];
|
||||
}
|
||||
) =>
|
||||
new Promise((resolve) => {
|
||||
|
@@ -44,7 +44,7 @@ class MoreInfoSun extends LitElement {
|
||||
>
|
||||
<ha-relative-time
|
||||
.hass=${this.hass}
|
||||
.datetime=${item === "ris" ? risingDate : settingDate}
|
||||
.datetimeObj=${item === "ris" ? risingDate : settingDate}
|
||||
></ha-relative-time>
|
||||
</div>
|
||||
<div class="value">
|
||||
@@ -80,7 +80,6 @@ class MoreInfoSun extends LitElement {
|
||||
}
|
||||
ha-relative-time {
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
ha-relative-time::first-letter {
|
||||
text-transform: lowercase;
|
||||
|
@@ -60,12 +60,6 @@ export class HaTabsSubpageDataTable extends LitElement {
|
||||
*/
|
||||
@property({ type: Boolean }) public hasFab = false;
|
||||
|
||||
/**
|
||||
* Add an extra row at the bottom of the data table
|
||||
* @type {TemplateResult}
|
||||
*/
|
||||
@property({ attribute: false }) public appendRow?;
|
||||
|
||||
/**
|
||||
* Field with a unique id per entry in data.
|
||||
* @type {String}
|
||||
@@ -177,7 +171,6 @@ export class HaTabsSubpageDataTable extends LitElement {
|
||||
.noDataText=${this.noDataText}
|
||||
.dir=${computeRTLDirection(this.hass)}
|
||||
.clickable=${this.clickable}
|
||||
.appendRow=${this.appendRow}
|
||||
>
|
||||
${!this.narrow
|
||||
? html`
|
||||
|
@@ -17,7 +17,6 @@ import { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import { haStyleDialog } from "../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { AreaRegistryDetailDialogParams } from "./show-dialog-area-registry-detail";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
|
||||
class DialogAreaDetail extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
@@ -155,8 +154,6 @@ class DialogAreaDetail extends LitElement {
|
||||
} finally {
|
||||
this._submitting = false;
|
||||
}
|
||||
|
||||
navigate(this, "/config/areas/dashboard");
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
|
@@ -39,7 +39,7 @@ export class HaWaitForTriggerAction extends LitElement
|
||||
)}
|
||||
>
|
||||
<ha-switch
|
||||
.checked=${continue_on_timeout ?? true}
|
||||
.checked=${continue_on_timeout}
|
||||
@change=${this._continueChanged}
|
||||
></ha-switch>
|
||||
</ha-formfield>
|
||||
|
@@ -18,9 +18,13 @@ import "@polymer/paper-input/paper-textarea";
|
||||
import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
|
||||
import "../../../components/entity/ha-entity-toggle";
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "./trigger/ha-automation-trigger";
|
||||
import "./condition/ha-automation-condition";
|
||||
import "./action/ha-automation-action";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HassEntity } from "home-assistant-js-websocket";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import {
|
||||
BlueprintOrError,
|
||||
Blueprints,
|
||||
@@ -59,7 +63,7 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
|
||||
protected render() {
|
||||
const blueprint = this._blueprint;
|
||||
return html`<ha-config-section vertical .isWide=${this.isWide}>
|
||||
return html`<ha-config-section .isWide=${this.isWide}>
|
||||
${!this.narrow
|
||||
? html` <span slot="header">${this.config.alias}</span> `
|
||||
: ""}
|
||||
@@ -115,7 +119,7 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
</ha-card>
|
||||
</ha-config-section>
|
||||
|
||||
<ha-config-section vertical .isWide=${this.isWide}>
|
||||
<ha-config-section .isWide=${this.isWide}>
|
||||
<span slot="header"
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.automation.editor.blueprint.header"
|
||||
@@ -140,6 +144,11 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
"ui.panel.config.automation.editor.blueprint.no_blueprints"
|
||||
)
|
||||
: html`<ha-circular-progress active></ha-circular-progress>`}
|
||||
<mwc-button @click=${this._navigateBlueprints}>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.automation.editor.blueprint.manage_blueprints"
|
||||
)}
|
||||
</mwc-button>
|
||||
</div>
|
||||
|
||||
${this.config.use_blueprint.path
|
||||
@@ -148,37 +157,41 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
There is an error in this Blueprint: ${blueprint.error}
|
||||
</p>`
|
||||
: html`${blueprint?.metadata.description
|
||||
? html`<p class="card-content pre-line">
|
||||
${blueprint.metadata.description}
|
||||
</p>`
|
||||
? html`<p>${blueprint.metadata.description}</p>`
|
||||
: ""}
|
||||
${blueprint?.metadata?.input &&
|
||||
Object.keys(blueprint.metadata.input).length
|
||||
? Object.entries(blueprint.metadata.input).map(
|
||||
([key, value]) =>
|
||||
html`<ha-settings-row .narrow=${this.narrow}>
|
||||
<span slot="heading">${value?.name || key}</span>
|
||||
<span slot="description">${value?.description}</span>
|
||||
${value?.selector
|
||||
? html`<ha-selector
|
||||
.hass=${this.hass}
|
||||
.selector=${value.selector}
|
||||
.key=${key}
|
||||
.value=${(this.config.use_blueprint.input &&
|
||||
this.config.use_blueprint.input[key]) ||
|
||||
value?.default}
|
||||
@value-changed=${this._inputChanged}
|
||||
></ha-selector>`
|
||||
: html`<paper-input
|
||||
.key=${key}
|
||||
required
|
||||
.value=${this.config.use_blueprint.input &&
|
||||
this.config.use_blueprint.input[key]}
|
||||
@value-changed=${this._inputChanged}
|
||||
no-label-float
|
||||
></paper-input>`}
|
||||
</ha-settings-row>`
|
||||
)
|
||||
? html`<h3>
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.automation.editor.blueprint.inputs"
|
||||
)}
|
||||
</h3>
|
||||
${Object.entries(blueprint.metadata.input).map(
|
||||
([key, value]) =>
|
||||
html`<ha-settings-row .narrow=${this.narrow}>
|
||||
<span slot="heading">${value?.name || key}</span>
|
||||
<span slot="description"
|
||||
>${value?.description}</span
|
||||
>
|
||||
${value?.selector
|
||||
? html`<ha-selector
|
||||
.hass=${this.hass}
|
||||
.selector=${value.selector}
|
||||
.key=${key}
|
||||
.value=${(this.config.use_blueprint.input &&
|
||||
this.config.use_blueprint.input[key]) ||
|
||||
value?.default}
|
||||
@value-changed=${this._inputChanged}
|
||||
></ha-selector>`
|
||||
: html`<paper-input
|
||||
.key=${key}
|
||||
.value=${this.config.use_blueprint.input &&
|
||||
this.config.use_blueprint.input[key]}
|
||||
@value-changed=${this._inputChanged}
|
||||
no-label-float
|
||||
></paper-input>`}
|
||||
</ha-settings-row>`
|
||||
)}`
|
||||
: html`<p class="padding">
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.automation.editor.blueprint.no_inputs"
|
||||
@@ -224,18 +237,12 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
) {
|
||||
return;
|
||||
}
|
||||
const input = { ...this.config.use_blueprint.input, [key]: value };
|
||||
|
||||
if (value === "" || value === undefined) {
|
||||
delete input[key];
|
||||
}
|
||||
|
||||
fireEvent(this, "value-changed", {
|
||||
value: {
|
||||
...this.config!,
|
||||
use_blueprint: {
|
||||
...this.config.use_blueprint,
|
||||
input,
|
||||
input: { ...this.config.use_blueprint.input, [key]: value },
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -260,18 +267,25 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
});
|
||||
}
|
||||
|
||||
private _navigateBlueprints() {
|
||||
navigate(this, "/config/blueprint");
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
ha-card {
|
||||
overflow: hidden;
|
||||
}
|
||||
.padding {
|
||||
padding: 16px;
|
||||
}
|
||||
.pre-line {
|
||||
white-space: pre-line;
|
||||
}
|
||||
.blueprint-picker-container {
|
||||
padding: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
h3 {
|
||||
margin: 16px;
|
||||
@@ -290,10 +304,10 @@ export class HaBlueprintAutomationEditor extends LitElement {
|
||||
border-top: 1px solid var(--divider-color);
|
||||
}
|
||||
:host(:not([narrow])) ha-settings-row paper-input {
|
||||
width: 60%;
|
||||
width: 50%;
|
||||
}
|
||||
:host(:not([narrow])) ha-settings-row ha-selector {
|
||||
width: 60%;
|
||||
width: 50%;
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
@@ -32,7 +32,6 @@ import "../../../components/ha-svg-icon";
|
||||
import "../../../components/ha-yaml-editor";
|
||||
import { showToast } from "../../../util/toast";
|
||||
import type { HaYamlEditor } from "../../../components/ha-yaml-editor";
|
||||
import { copyToClipboard } from "../../../common/util/copy-clipboard";
|
||||
import {
|
||||
AutomationConfig,
|
||||
AutomationEntity,
|
||||
@@ -207,7 +206,6 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) {
|
||||
? html`<blueprint-automation-editor
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
.isWide=${this.isWide}
|
||||
.stateObj=${stateObj}
|
||||
.config=${this._config}
|
||||
@value-changed=${this._valueChanged}
|
||||
@@ -215,7 +213,6 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) {
|
||||
: html`<manual-automation-editor
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
.isWide=${this.isWide}
|
||||
.stateObj=${stateObj}
|
||||
.config=${this._config}
|
||||
@value-changed=${this._valueChanged}
|
||||
@@ -397,7 +394,7 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) {
|
||||
|
||||
private async _copyYaml() {
|
||||
if (this._editor?.yaml) {
|
||||
copyToClipboard(this._editor.yaml);
|
||||
navigator.clipboard.writeText(this._editor.yaml);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -12,7 +12,6 @@ import {
|
||||
internalProperty,
|
||||
query,
|
||||
TemplateResult,
|
||||
css,
|
||||
} from "lit-element";
|
||||
import "../../../components/ha-dialog";
|
||||
import { haStyleDialog } from "../../../resources/styles";
|
||||
@@ -74,9 +73,7 @@ class DialogImportBlueprint extends LitElement {
|
||||
this._result.blueprint.metadata.domain
|
||||
)}
|
||||
<br />
|
||||
<p class="pre-line">
|
||||
${this._result.blueprint.metadata.description}
|
||||
</p>
|
||||
${this._result.blueprint.metadata.description}
|
||||
${this._result.validation_errors
|
||||
? html`
|
||||
<p class="error">
|
||||
@@ -107,16 +104,7 @@ class DialogImportBlueprint extends LitElement {
|
||||
<pre>${this._result.raw_data}</pre>
|
||||
</ha-expansion-panel>`
|
||||
: html`${this.hass.localize(
|
||||
"ui.panel.config.blueprint.add.import_introduction_link",
|
||||
"community_link",
|
||||
html`<a
|
||||
href="https://www.home-assistant.io/get-blueprints"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.blueprint.add.community_forums"
|
||||
)}</a
|
||||
>`
|
||||
"ui.panel.config.blueprint.add.import_introduction"
|
||||
)}<paper-input
|
||||
id="input"
|
||||
.label=${this.hass.localize(
|
||||
@@ -211,15 +199,8 @@ class DialogImportBlueprint extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyleDialog,
|
||||
css`
|
||||
.pre-line {
|
||||
white-space: pre-line;
|
||||
}
|
||||
`,
|
||||
];
|
||||
static get styles(): CSSResult {
|
||||
return haStyleDialog;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import "../../../components/ha-fab";
|
||||
import "@material/mwc-icon-button";
|
||||
import { mdiHelpCircle, mdiDelete, mdiRobot, mdiDownload } from "@mdi/js";
|
||||
import { mdiPlus, mdiHelpCircle, mdiDelete, mdiRobot } from "@mdi/js";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import {
|
||||
CSSResult,
|
||||
@@ -112,6 +112,7 @@ class HaBlueprintOverview extends LitElement {
|
||||
create: {
|
||||
title: "",
|
||||
type: narrow ? "icon-button" : undefined,
|
||||
width: narrow ? undefined : "180px",
|
||||
template: (_, blueprint: any) =>
|
||||
blueprint.error
|
||||
? ""
|
||||
@@ -125,9 +126,8 @@ class HaBlueprintOverview extends LitElement {
|
||||
"ui.panel.config.blueprint.overview.use_blueprint"
|
||||
)}
|
||||
@click=${(ev) => this._createNew(ev)}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiRobot}></ha-svg-icon>
|
||||
</mwc-icon-button>`
|
||||
><ha-svg-icon .path=${mdiRobot}></ha-svg-icon
|
||||
></mwc-icon-button>`
|
||||
: html`<mwc-button
|
||||
.blueprint=${blueprint}
|
||||
@click=${(ev) => this._createNew(ev)}
|
||||
@@ -170,23 +170,6 @@ class HaBlueprintOverview extends LitElement {
|
||||
"ui.panel.config.blueprint.overview.no_blueprints"
|
||||
)}
|
||||
hasFab
|
||||
.appendRow=${html` <div
|
||||
class="mdc-data-table__cell"
|
||||
style="width: 100%; text-align: center;"
|
||||
role="cell"
|
||||
>
|
||||
<a
|
||||
href="https://www.home-assistant.io/get-blueprints"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>
|
||||
<mwc-button
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.blueprint.overview.discover_more"
|
||||
)}</mwc-button
|
||||
>
|
||||
</a>
|
||||
</div>`}
|
||||
>
|
||||
<mwc-icon-button slot="toolbar-icon" @click=${this._showHelp}>
|
||||
<ha-svg-icon .path=${mdiHelpCircle}></ha-svg-icon>
|
||||
@@ -199,7 +182,7 @@ class HaBlueprintOverview extends LitElement {
|
||||
extended
|
||||
@click=${this._addBlueprint}
|
||||
>
|
||||
<ha-svg-icon slot="icon" .path=${mdiDownload}></ha-svg-icon>
|
||||
<ha-svg-icon slot="icon" .path=${mdiPlus}></ha-svg-icon>
|
||||
</ha-fab>
|
||||
</hass-tabs-subpage-data-table>
|
||||
`;
|
||||
@@ -212,10 +195,7 @@ class HaBlueprintOverview extends LitElement {
|
||||
${this.hass.localize("ui.panel.config.blueprint.overview.introduction")}
|
||||
<p>
|
||||
<a
|
||||
href="${documentationUrl(
|
||||
this.hass,
|
||||
"/docs/automation/using_blueprints/"
|
||||
)}"
|
||||
href="${documentationUrl(this.hass, "/docs/blueprint/editor/")}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
|
@@ -92,7 +92,7 @@ class HaConfigCustomize extends LocalizeMixin(PolymerElement) {
|
||||
}
|
||||
|
||||
_computeTabs() {
|
||||
return configSections.advanced;
|
||||
return configSections.general;
|
||||
}
|
||||
|
||||
computeEntities(hass) {
|
||||
|
@@ -8,6 +8,7 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
PropertyValues,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
@@ -30,7 +31,7 @@ export class HaDeviceEntitiesCard extends LitElement {
|
||||
|
||||
@property() public entities!: EntityRegistryStateEntry[];
|
||||
|
||||
@property() public showDisabled = false;
|
||||
@internalProperty() private _showDisabled = false;
|
||||
|
||||
private _entityRows: Array<LovelaceRow | HuiErrorCard> = [];
|
||||
|
||||
@@ -67,7 +68,7 @@ export class HaDeviceEntitiesCard extends LitElement {
|
||||
})}
|
||||
</div>
|
||||
${disabledEntities.length
|
||||
? !this.showDisabled
|
||||
? !this._showDisabled
|
||||
? html`
|
||||
<button
|
||||
class="show-more"
|
||||
@@ -118,7 +119,7 @@ export class HaDeviceEntitiesCard extends LitElement {
|
||||
}
|
||||
|
||||
private _toggleShowDisabled() {
|
||||
this.showDisabled = !this.showDisabled;
|
||||
this._showDisabled = !this._showDisabled;
|
||||
}
|
||||
|
||||
private _renderEntity(entry: EntityRegistryStateEntry): TemplateResult {
|
||||
@@ -226,9 +227,3 @@ export class HaDeviceEntitiesCard extends LitElement {
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-device-entities-card": HaDeviceEntitiesCard;
|
||||
}
|
||||
}
|
||||
|
@@ -19,11 +19,10 @@ import {
|
||||
|
||||
import { DeviceRegistryDetailDialogParams } from "./show-dialog-device-registry-detail";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import type { HaSwitch } from "../../../../components/ha-switch";
|
||||
import { PolymerChangedEvent } from "../../../../polymer-types";
|
||||
import { computeDeviceName } from "../../../../data/device_registry";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { haStyle, haStyleDialog } from "../../../../resources/styles";
|
||||
import { haStyleDialog } from "../../../../resources/styles";
|
||||
|
||||
@customElement("dialog-device-registry-detail")
|
||||
class DialogDeviceRegistryDetail extends LitElement {
|
||||
@@ -37,8 +36,6 @@ class DialogDeviceRegistryDetail extends LitElement {
|
||||
|
||||
@internalProperty() private _areaId?: string;
|
||||
|
||||
@internalProperty() private _disabledBy!: string | null;
|
||||
|
||||
@internalProperty() private _submitting?: boolean;
|
||||
|
||||
public async showDialog(
|
||||
@@ -48,7 +45,6 @@ class DialogDeviceRegistryDetail extends LitElement {
|
||||
this._error = undefined;
|
||||
this._nameByUser = this._params.device.name_by_user || "";
|
||||
this._areaId = this._params.device.area_id;
|
||||
this._disabledBy = this._params.device.disabled_by;
|
||||
await this.updateComplete;
|
||||
}
|
||||
|
||||
@@ -84,32 +80,6 @@ class DialogDeviceRegistryDetail extends LitElement {
|
||||
.value=${this._areaId}
|
||||
@value-changed=${this._areaPicked}
|
||||
></ha-area-picker>
|
||||
<div class="row">
|
||||
<ha-switch
|
||||
.checked=${!this._disabledBy}
|
||||
@change=${this._disabledByChanged}
|
||||
>
|
||||
</ha-switch>
|
||||
<div>
|
||||
<div>
|
||||
${this.hass.localize("ui.panel.config.devices.enabled_label")}
|
||||
</div>
|
||||
<div class="secondary">
|
||||
${this._disabledBy && this._disabledBy !== "user"
|
||||
? this.hass.localize(
|
||||
"ui.panel.config.devices.enabled_cause",
|
||||
"cause",
|
||||
this.hass.localize(
|
||||
`config_entry.disabled_by.${this._disabledBy}`
|
||||
)
|
||||
)
|
||||
: ""}
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.devices.enabled_description"
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<mwc-button
|
||||
@@ -139,17 +109,12 @@ class DialogDeviceRegistryDetail extends LitElement {
|
||||
this._areaId = event.detail.value;
|
||||
}
|
||||
|
||||
private _disabledByChanged(ev: Event): void {
|
||||
this._disabledBy = (ev.target as HaSwitch).checked ? null : "user";
|
||||
}
|
||||
|
||||
private async _updateEntry(): Promise<void> {
|
||||
this._submitting = true;
|
||||
try {
|
||||
await this._params!.updateEntry({
|
||||
name_by_user: this._nameByUser.trim() || null,
|
||||
area_id: this._areaId || null,
|
||||
disabled_by: this._disabledBy || null,
|
||||
});
|
||||
this._params = undefined;
|
||||
} catch (err) {
|
||||
@@ -163,7 +128,6 @@ class DialogDeviceRegistryDetail extends LitElement {
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyle,
|
||||
haStyleDialog,
|
||||
css`
|
||||
.form {
|
||||
@@ -175,15 +139,6 @@ class DialogDeviceRegistryDetail extends LitElement {
|
||||
.error {
|
||||
color: var(--error-color);
|
||||
}
|
||||
ha-switch {
|
||||
margin-right: 16px;
|
||||
}
|
||||
.row {
|
||||
margin-top: 8px;
|
||||
color: var(--primary-text-color);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
@@ -46,7 +46,6 @@ import "./device-detail/ha-device-entities-card";
|
||||
import "./device-detail/ha-device-info-card";
|
||||
import { showDeviceAutomationDialog } from "./device-detail/show-dialog-device-automation";
|
||||
import { brandsUrl } from "../../../util/brands-url";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
|
||||
export interface EntityRegistryStateEntry extends EntityRegistryEntry {
|
||||
stateName?: string | null;
|
||||
@@ -247,28 +246,6 @@ export class HaConfigDevicePage extends LitElement {
|
||||
.devices=${this.devices}
|
||||
.device=${device}
|
||||
>
|
||||
${
|
||||
device.disabled_by
|
||||
? html`
|
||||
<div>
|
||||
<p class="warning">
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.devices.enabled_cause",
|
||||
"cause",
|
||||
this.hass.localize(
|
||||
`ui.panel.config.devices.disabled_by.${device.disabled_by}`
|
||||
)
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-actions" slot="actions">
|
||||
<mwc-button unelevated @click=${this._enableDevice}>
|
||||
${this.hass.localize("ui.common.enable")}
|
||||
</mwc-button>
|
||||
</div>
|
||||
`
|
||||
: html``
|
||||
}
|
||||
${this._renderIntegrationInfo(device, integrations)}
|
||||
</ha-device-info-card>
|
||||
|
||||
@@ -278,7 +255,6 @@ export class HaConfigDevicePage extends LitElement {
|
||||
<ha-device-entities-card
|
||||
.hass=${this.hass}
|
||||
.entities=${entities}
|
||||
.showDisabled=${device.disabled_by !== null}
|
||||
>
|
||||
</ha-device-entities-card>
|
||||
`
|
||||
@@ -296,14 +272,9 @@ export class HaConfigDevicePage extends LitElement {
|
||||
)}
|
||||
<ha-icon-button
|
||||
@click=${this._showAutomationDialog}
|
||||
.disabled=${device.disabled_by}
|
||||
title=${device.disabled_by
|
||||
? this.hass.localize(
|
||||
"ui.panel.config.devices.automation.create_disabled"
|
||||
)
|
||||
: this.hass.localize(
|
||||
"ui.panel.config.devices.automation.create"
|
||||
)}
|
||||
title=${this.hass.localize(
|
||||
"ui.panel.config.devices.automation.create"
|
||||
)}
|
||||
icon="hass:plus-circle"
|
||||
></ha-icon-button>
|
||||
</h1>
|
||||
@@ -371,16 +342,9 @@ export class HaConfigDevicePage extends LitElement {
|
||||
|
||||
<ha-icon-button
|
||||
@click=${this._createScene}
|
||||
.disabled=${device.disabled_by}
|
||||
title=${
|
||||
device.disabled_by
|
||||
? this.hass.localize(
|
||||
"ui.panel.config.devices.scene.create_disabled"
|
||||
)
|
||||
: this.hass.localize(
|
||||
"ui.panel.config.devices.scene.create"
|
||||
)
|
||||
}
|
||||
title=${this.hass.localize(
|
||||
"ui.panel.config.devices.scene.create"
|
||||
)}
|
||||
icon="hass:plus-circle"
|
||||
></ha-icon-button>
|
||||
</h1>
|
||||
@@ -451,14 +415,9 @@ export class HaConfigDevicePage extends LitElement {
|
||||
)}
|
||||
<ha-icon-button
|
||||
@click=${this._showScriptDialog}
|
||||
.disabled=${device.disabled_by}
|
||||
title=${device.disabled_by
|
||||
? this.hass.localize(
|
||||
"ui.panel.config.devices.script.create_disabled"
|
||||
)
|
||||
: this.hass.localize(
|
||||
"ui.panel.config.devices.script.create"
|
||||
)}
|
||||
title=${this.hass.localize(
|
||||
"ui.panel.config.devices.script.create"
|
||||
)}
|
||||
icon="hass:plus-circle"
|
||||
></ha-icon-button>
|
||||
</h1>
|
||||
@@ -673,137 +632,128 @@ export class HaConfigDevicePage extends LitElement {
|
||||
});
|
||||
}
|
||||
|
||||
private async _enableDevice(): Promise<void> {
|
||||
await updateDeviceRegistryEntry(this.hass, this.deviceId, {
|
||||
disabled_by: null,
|
||||
});
|
||||
}
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
.container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: auto;
|
||||
max-width: 1000px;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
.container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: auto;
|
||||
max-width: 1000px;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
.card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.card-header ha-icon-button {
|
||||
margin-right: -8px;
|
||||
color: var(--primary-color);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.card-header ha-icon-button {
|
||||
margin-right: -8px;
|
||||
color: var(--primary-color);
|
||||
height: auto;
|
||||
}
|
||||
.device-info {
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.device-info {
|
||||
padding: 16px;
|
||||
}
|
||||
.show-more {
|
||||
}
|
||||
|
||||
.show-more {
|
||||
}
|
||||
h1 {
|
||||
margin: 0;
|
||||
font-family: var(--paper-font-headline_-_font-family);
|
||||
-webkit-font-smoothing: var(
|
||||
--paper-font-headline_-_-webkit-font-smoothing
|
||||
);
|
||||
font-size: var(--paper-font-headline_-_font-size);
|
||||
font-weight: var(--paper-font-headline_-_font-weight);
|
||||
letter-spacing: var(--paper-font-headline_-_letter-spacing);
|
||||
line-height: var(--paper-font-headline_-_line-height);
|
||||
opacity: var(--dark-primary-opacity);
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
font-family: var(--paper-font-headline_-_font-family);
|
||||
-webkit-font-smoothing: var(
|
||||
--paper-font-headline_-_-webkit-font-smoothing
|
||||
);
|
||||
font-size: var(--paper-font-headline_-_font-size);
|
||||
font-weight: var(--paper-font-headline_-_font-weight);
|
||||
letter-spacing: var(--paper-font-headline_-_letter-spacing);
|
||||
line-height: var(--paper-font-headline_-_line-height);
|
||||
opacity: var(--dark-primary-opacity);
|
||||
}
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.column,
|
||||
.fullwidth {
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.column {
|
||||
width: 33%;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.fullwidth {
|
||||
width: 100%;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.column,
|
||||
.fullwidth {
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.column {
|
||||
width: 33%;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.fullwidth {
|
||||
width: 100%;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.header-right {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.header-right {
|
||||
align-self: center;
|
||||
}
|
||||
.header-right img {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.header-right img {
|
||||
height: 30px;
|
||||
}
|
||||
.header-right {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.header-right {
|
||||
display: flex;
|
||||
}
|
||||
.header-right:first-child {
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.header-right:first-child {
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.header-right > *:not(:first-child) {
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
.header-right > *:not(:first-child) {
|
||||
margin-left: 16px;
|
||||
}
|
||||
.battery {
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.battery {
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
.column > *:not(:first-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.column > *:not(:first-child) {
|
||||
margin-top: 16px;
|
||||
}
|
||||
:host([narrow]) .column {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:host([narrow]) .column {
|
||||
width: 100%;
|
||||
}
|
||||
:host([narrow]) .container {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
:host([narrow]) .container {
|
||||
margin-top: 0;
|
||||
}
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
font-size: var(--paper-font-body1_-_font-size);
|
||||
}
|
||||
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
font-size: var(--paper-font-body1_-_font-size);
|
||||
}
|
||||
paper-item.no-link {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
paper-item.no-link {
|
||||
cursor: default;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
ha-card {
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
ha-card {
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
ha-card a {
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
`,
|
||||
];
|
||||
ha-card a {
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
@@ -1,9 +1,5 @@
|
||||
import { mdiPlus, mdiFilterVariant, mdiCancel } from "@mdi/js";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import { mdiPlus } from "@mdi/js";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
@@ -11,9 +7,7 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import memoizeOne from "memoize-one";
|
||||
import type { RequestSelectedDetail } from "@material/mwc-list/mwc-list-item";
|
||||
import { HASSDomEvent } from "../../../common/dom/fire_event";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import { LocalizeFunc } from "../../../common/translations/localize";
|
||||
@@ -24,7 +18,6 @@ import {
|
||||
RowClickedEvent,
|
||||
} from "../../../components/data-table/ha-data-table";
|
||||
import "../../../components/entity/ha-battery-icon";
|
||||
import "../../../components/ha-button-menu";
|
||||
import { AreaRegistryEntry } from "../../../data/area_registry";
|
||||
import { ConfigEntry } from "../../../data/config_entries";
|
||||
import {
|
||||
@@ -41,7 +34,6 @@ import { domainToName } from "../../../data/integration";
|
||||
import "../../../layouts/hass-tabs-subpage-data-table";
|
||||
import { HomeAssistant, Route } from "../../../types";
|
||||
import { configSections } from "../ha-panel-config";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
|
||||
interface DeviceRowData extends DeviceRegistryEntry {
|
||||
device?: DeviceRowData;
|
||||
@@ -72,12 +64,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
window.location.search
|
||||
);
|
||||
|
||||
@internalProperty() private _showDisabled = false;
|
||||
|
||||
@internalProperty() private _filter = "";
|
||||
|
||||
@internalProperty() private _numHiddenDevices = 0;
|
||||
|
||||
private _activeFilters = memoizeOne(
|
||||
(
|
||||
entries: ConfigEntry[],
|
||||
@@ -88,10 +74,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
filters.forEach((value, key) => {
|
||||
switch (key) {
|
||||
case "config_entry": {
|
||||
// If we are requested to show the devices for a given config entry,
|
||||
// also show the disabled ones by default.
|
||||
this._showDisabled = true;
|
||||
|
||||
const configEntry = entries.find(
|
||||
(entry) => entry.entry_id === value
|
||||
);
|
||||
@@ -123,7 +105,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
entities: EntityRegistryEntry[],
|
||||
areas: AreaRegistryEntry[],
|
||||
filters: URLSearchParams,
|
||||
showDisabled: boolean,
|
||||
localize: LocalizeFunc
|
||||
) => {
|
||||
// Some older installations might have devices pointing at invalid entryIDs
|
||||
@@ -136,9 +117,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
deviceLookup[device.id] = device;
|
||||
}
|
||||
|
||||
// If nothing gets filtered, this is our correct count of devices
|
||||
let startLength = outputDevices.length;
|
||||
|
||||
const deviceEntityLookup: DeviceEntityLookup = {};
|
||||
for (const entity of entities) {
|
||||
if (!entity.device_id) {
|
||||
@@ -167,7 +145,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
outputDevices = outputDevices.filter((device) =>
|
||||
device.config_entries.includes(value)
|
||||
);
|
||||
startLength = outputDevices.length;
|
||||
const configEntry = entries.find((entry) => entry.entry_id === value);
|
||||
if (configEntry) {
|
||||
filterDomains.push(configEntry.domain);
|
||||
@@ -175,10 +152,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
}
|
||||
});
|
||||
|
||||
if (!showDisabled) {
|
||||
outputDevices = outputDevices.filter((device) => !device.disabled_by);
|
||||
}
|
||||
|
||||
outputDevices = outputDevices.map((device) => {
|
||||
return {
|
||||
...device,
|
||||
@@ -189,7 +162,9 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
),
|
||||
model: device.model || "<unknown>",
|
||||
manufacturer: device.manufacturer || "<unknown>",
|
||||
area: device.area_id ? areaLookup[device.area_id].name : undefined,
|
||||
area: device.area_id
|
||||
? areaLookup[device.area_id].name
|
||||
: this.hass.localize("ui.panel.config.devices.data_table.no_area"),
|
||||
integration: device.config_entries.length
|
||||
? device.config_entries
|
||||
.filter((entId) => entId in entryLookup)
|
||||
@@ -207,19 +182,16 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
};
|
||||
});
|
||||
|
||||
this._numHiddenDevices = startLength - outputDevices.length;
|
||||
return { devicesOutput: outputDevices, filteredDomains: filterDomains };
|
||||
}
|
||||
);
|
||||
|
||||
private _columns = memoizeOne(
|
||||
(narrow: boolean, showDisabled: boolean): DataTableColumnContainer => {
|
||||
(narrow: boolean): DataTableColumnContainer => {
|
||||
const columns: DataTableColumnContainer = narrow
|
||||
? {
|
||||
name: {
|
||||
title: this.hass.localize(
|
||||
"ui.panel.config.devices.data_table.device"
|
||||
),
|
||||
title: "Device",
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
direction: "asc",
|
||||
@@ -305,24 +277,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
: html` - `;
|
||||
},
|
||||
};
|
||||
if (showDisabled) {
|
||||
columns.disabled_by = {
|
||||
title: "",
|
||||
type: "icon",
|
||||
template: (disabled_by) =>
|
||||
disabled_by
|
||||
? html`<div
|
||||
tabindex="0"
|
||||
style="display:inline-block; position: relative;"
|
||||
>
|
||||
<ha-svg-icon .path=${mdiCancel}></ha-svg-icon>
|
||||
<paper-tooltip animation-delay="0" position="left">
|
||||
${this.hass.localize("ui.panel.config.devices.disabled")}
|
||||
</paper-tooltip>
|
||||
</div>`
|
||||
: "",
|
||||
};
|
||||
}
|
||||
return columns;
|
||||
}
|
||||
);
|
||||
@@ -344,119 +298,9 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
this.entities,
|
||||
this.areas,
|
||||
this._searchParms,
|
||||
this._showDisabled,
|
||||
this.hass.localize
|
||||
);
|
||||
const includeZHAFab = filteredDomains.includes("zha");
|
||||
const activeFilters = this._activeFilters(
|
||||
this.entries,
|
||||
this._searchParms,
|
||||
this.hass.localize
|
||||
);
|
||||
|
||||
const headerToolbar = html`
|
||||
<search-input
|
||||
no-label-float
|
||||
no-underline
|
||||
@value-changed=${this._handleSearchChange}
|
||||
.filter=${this._filter}
|
||||
.label=${this.hass.localize("ui.panel.config.devices.picker.search")}
|
||||
></search-input
|
||||
>${activeFilters
|
||||
? html`<div class="active-filters">
|
||||
${this.narrow
|
||||
? html` <div>
|
||||
<ha-icon icon="hass:filter-variant"></ha-icon>
|
||||
<paper-tooltip animation-delay="0" position="left">
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.filtering.filtering_by"
|
||||
)}
|
||||
${activeFilters.join(", ")}
|
||||
${this._numHiddenDevices
|
||||
? "(" +
|
||||
this.hass.localize(
|
||||
"ui.panel.config.devices.picker.filter.hidden_devices",
|
||||
"number",
|
||||
this._numHiddenDevices
|
||||
) +
|
||||
")"
|
||||
: ""}
|
||||
</paper-tooltip>
|
||||
</div>`
|
||||
: `${this.hass.localize(
|
||||
"ui.panel.config.filtering.filtering_by"
|
||||
)} ${activeFilters.join(", ")}
|
||||
${
|
||||
this._numHiddenDevices
|
||||
? "(" +
|
||||
this.hass.localize(
|
||||
"ui.panel.config.devices.picker.filter.hidden_devices",
|
||||
"number",
|
||||
this._numHiddenDevices
|
||||
) +
|
||||
")"
|
||||
: ""
|
||||
}
|
||||
`}
|
||||
<mwc-button @click=${this._clearFilter}
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.filtering.clear"
|
||||
)}</mwc-button
|
||||
>
|
||||
</div>`
|
||||
: ""}
|
||||
${this._numHiddenDevices && !activeFilters
|
||||
? html`<div class="active-filters">
|
||||
${this.narrow
|
||||
? html` <div>
|
||||
<ha-icon icon="hass:filter-variant"></ha-icon>
|
||||
<paper-tooltip animation-delay="0" position="left">
|
||||
${this.hass.localize(
|
||||
"ui.panel.config.devices.picker.filter.hidden_devices",
|
||||
"number",
|
||||
this._numHiddenDevices
|
||||
)}
|
||||
</paper-tooltip>
|
||||
</div>`
|
||||
: `${this.hass.localize(
|
||||
"ui.panel.config.devices.picker.filter.hidden_devices",
|
||||
"number",
|
||||
this._numHiddenDevices
|
||||
)}`}
|
||||
<mwc-button @click=${this._showAll}
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.devices.picker.filter.show_all"
|
||||
)}</mwc-button
|
||||
>
|
||||
</div>`
|
||||
: ""}
|
||||
<ha-button-menu corner="BOTTOM_START" multi>
|
||||
<mwc-icon-button
|
||||
slot="trigger"
|
||||
.label=${this.hass!.localize(
|
||||
"ui.panel.config.devices.picker.filter.filter"
|
||||
)}
|
||||
.title=${this.hass!.localize(
|
||||
"ui.panel.config.devices.picker.filter.filter"
|
||||
)}
|
||||
>
|
||||
<ha-svg-icon .path=${mdiFilterVariant}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
<mwc-list-item
|
||||
@request-selected="${this._showDisabledChanged}"
|
||||
graphic="control"
|
||||
.selected=${this._showDisabled}
|
||||
>
|
||||
<ha-checkbox
|
||||
slot="graphic"
|
||||
.checked=${this._showDisabled}
|
||||
></ha-checkbox>
|
||||
${this.hass!.localize(
|
||||
"ui.panel.config.devices.picker.filter.show_disabled"
|
||||
)}
|
||||
</mwc-list-item>
|
||||
</ha-button-menu>
|
||||
`;
|
||||
|
||||
return html`
|
||||
<hass-tabs-subpage-data-table
|
||||
@@ -467,9 +311,13 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
: "/config"}
|
||||
.tabs=${configSections.integrations}
|
||||
.route=${this.route}
|
||||
.columns=${this._columns(this.narrow, this._showDisabled)}
|
||||
.columns=${this._columns(this.narrow)}
|
||||
.data=${devicesOutput}
|
||||
.filter=${this._filter}
|
||||
.activeFilters=${this._activeFilters(
|
||||
this.entries,
|
||||
this._searchParms,
|
||||
this.hass.localize
|
||||
)}
|
||||
@row-click=${this._handleRowClicked}
|
||||
clickable
|
||||
.hasFab=${includeZHAFab}
|
||||
@@ -485,15 +333,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
</ha-fab>
|
||||
</a>`
|
||||
: html``}
|
||||
<div
|
||||
class=${classMap({
|
||||
"search-toolbar": this.narrow,
|
||||
"table-header": !this.narrow,
|
||||
})}
|
||||
slot="header"
|
||||
>
|
||||
${headerToolbar}
|
||||
</div>
|
||||
</hass-tabs-subpage-data-table>
|
||||
`;
|
||||
}
|
||||
@@ -524,136 +363,6 @@ export class HaConfigDeviceDashboard extends LitElement {
|
||||
const deviceId = ev.detail.id;
|
||||
navigate(this, `/config/devices/device/${deviceId}`);
|
||||
}
|
||||
|
||||
private _showDisabledChanged(ev: CustomEvent<RequestSelectedDetail>) {
|
||||
if (ev.detail.source !== "property") {
|
||||
return;
|
||||
}
|
||||
this._showDisabled = ev.detail.selected;
|
||||
}
|
||||
|
||||
private _handleSearchChange(ev: CustomEvent) {
|
||||
this._filter = ev.detail.value;
|
||||
}
|
||||
|
||||
private _clearFilter() {
|
||||
navigate(this, window.location.pathname, true);
|
||||
}
|
||||
|
||||
private _showAll() {
|
||||
this._showDisabled = true;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
hass-loading-screen {
|
||||
--app-header-background-color: var(--sidebar-background-color);
|
||||
--app-header-text-color: var(--sidebar-text-color);
|
||||
}
|
||||
a {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
h2 {
|
||||
margin-top: 0;
|
||||
font-family: var(--paper-font-headline_-_font-family);
|
||||
-webkit-font-smoothing: var(
|
||||
--paper-font-headline_-_-webkit-font-smoothing
|
||||
);
|
||||
font-size: var(--paper-font-headline_-_font-size);
|
||||
font-weight: var(--paper-font-headline_-_font-weight);
|
||||
letter-spacing: var(--paper-font-headline_-_letter-spacing);
|
||||
line-height: var(--paper-font-headline_-_line-height);
|
||||
opacity: var(--dark-primary-opacity);
|
||||
}
|
||||
p {
|
||||
font-family: var(--paper-font-subhead_-_font-family);
|
||||
-webkit-font-smoothing: var(
|
||||
--paper-font-subhead_-_-webkit-font-smoothing
|
||||
);
|
||||
font-weight: var(--paper-font-subhead_-_font-weight);
|
||||
line-height: var(--paper-font-subhead_-_line-height);
|
||||
}
|
||||
ha-data-table {
|
||||
width: 100%;
|
||||
--data-table-border-width: 0;
|
||||
}
|
||||
:host(:not([narrow])) ha-data-table {
|
||||
height: calc(100vh - 1px - var(--header-height));
|
||||
display: block;
|
||||
}
|
||||
ha-button-menu {
|
||||
margin-right: 8px;
|
||||
}
|
||||
.table-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid rgba(var(--rgb-primary-text-color), 0.12);
|
||||
}
|
||||
search-input {
|
||||
margin-left: 16px;
|
||||
flex-grow: 1;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
.search-toolbar search-input {
|
||||
margin-left: 8px;
|
||||
top: 1px;
|
||||
}
|
||||
.search-toolbar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
.search-toolbar ha-button-menu {
|
||||
position: static;
|
||||
}
|
||||
.selected-txt {
|
||||
font-weight: bold;
|
||||
padding-left: 16px;
|
||||
}
|
||||
.table-header .selected-txt {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.search-toolbar .selected-txt {
|
||||
font-size: 16px;
|
||||
}
|
||||
.header-btns > mwc-button,
|
||||
.header-btns > ha-icon-button {
|
||||
margin: 8px;
|
||||
}
|
||||
.active-filters {
|
||||
color: var(--primary-text-color);
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 2px 2px 2px 8px;
|
||||
margin-left: 4px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.active-filters ha-icon {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
.active-filters mwc-button {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.active-filters::before {
|
||||
background-color: var(--primary-color);
|
||||
opacity: 0.12;
|
||||
border-radius: 4px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
content: "";
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
@@ -111,19 +111,10 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
|
||||
return html`
|
||||
${!stateObj
|
||||
? html`
|
||||
<div class="container warning">
|
||||
<div class="container">
|
||||
${this.hass!.localize(
|
||||
"ui.dialogs.entity_registry.editor.unavailable"
|
||||
)}
|
||||
${this._device?.disabled_by
|
||||
? html`<br />${this.hass!.localize(
|
||||
"ui.dialogs.entity_registry.editor.device_disabled"
|
||||
)}<br /><mwc-button @click=${this._openDeviceSettings}>
|
||||
${this.hass!.localize(
|
||||
"ui.dialogs.entity_registry.editor.open_device_settings"
|
||||
)}
|
||||
</mwc-button>`
|
||||
: ""}
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
@@ -170,7 +161,6 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
|
||||
<div class="row">
|
||||
<ha-switch
|
||||
.checked=${!this._disabledBy}
|
||||
.disabled=${this._device?.disabled_by}
|
||||
@change=${this._disabledByChanged}
|
||||
>
|
||||
</ha-switch>
|
||||
|
@@ -189,11 +189,9 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
|
||||
? (name, entity: any) =>
|
||||
html`
|
||||
${name}<br />
|
||||
<div class="secondary">
|
||||
${entity.entity_id} |
|
||||
${this.hass.localize(`component.${entity.platform}.title`) ||
|
||||
entity.platform}
|
||||
</div>
|
||||
${entity.entity_id} |
|
||||
${this.hass.localize(`component.${entity.platform}.title`) ||
|
||||
entity.platform}
|
||||
`
|
||||
: undefined,
|
||||
},
|
||||
|
@@ -5,8 +5,6 @@ import { classMap } from "lit-html/directives/class-map";
|
||||
export class HaConfigSection extends LitElement {
|
||||
@property() public isWide = false;
|
||||
|
||||
@property({ type: Boolean }) public vertical = false;
|
||||
|
||||
protected render() {
|
||||
return html`
|
||||
<div
|
||||
@@ -18,8 +16,8 @@ export class HaConfigSection extends LitElement {
|
||||
<div
|
||||
class="together layout ${classMap({
|
||||
narrow: !this.isWide,
|
||||
vertical: this.vertical || !this.isWide,
|
||||
horizontal: !this.vertical && this.isWide,
|
||||
vertical: !this.isWide,
|
||||
horizontal: this.isWide,
|
||||
})}"
|
||||
>
|
||||
<div class="intro"><slot name="introduction"></slot></div>
|
||||
|
@@ -148,7 +148,7 @@ export class HaConfigHelpers extends LitElement {
|
||||
.narrow=${this.narrow}
|
||||
back-path="/config"
|
||||
.route=${this.route}
|
||||
.tabs=${configSections.helpers}
|
||||
.tabs=${configSections.automation}
|
||||
.columns=${this._columns(this.narrow, this.hass.language)}
|
||||
.data=${this._getItems(this._stateItems)}
|
||||
@row-click=${this._openEditDialog}
|
||||
|
@@ -68,8 +68,6 @@ class DialogPersonDetail extends LitElement {
|
||||
|
||||
@internalProperty() private _submitting = false;
|
||||
|
||||
@internalProperty() private _personExists = false;
|
||||
|
||||
private _deviceTrackersAvailable = memoizeOne((hass) => {
|
||||
return Object.keys(hass.states).some(
|
||||
(entityId) =>
|
||||
@@ -81,7 +79,6 @@ class DialogPersonDetail extends LitElement {
|
||||
this._params = params;
|
||||
this._error = undefined;
|
||||
if (this._params.entry) {
|
||||
this._personExists = true;
|
||||
this._name = this._params.entry.name || "";
|
||||
this._userId = this._params.entry.user_id || undefined;
|
||||
this._deviceTrackers = this._params.entry.device_trackers || [];
|
||||
@@ -91,7 +88,6 @@ class DialogPersonDetail extends LitElement {
|
||||
: undefined;
|
||||
this._isAdmin = this._user?.group_ids.includes(SYSTEM_GROUP_ID_ADMIN);
|
||||
} else {
|
||||
this._personExists = false;
|
||||
this._name = "";
|
||||
this._userId = undefined;
|
||||
this._user = undefined;
|
||||
@@ -402,7 +398,6 @@ class DialogPersonDetail extends LitElement {
|
||||
await this._params!.updateEntry(values);
|
||||
} else {
|
||||
await this._params!.createEntry(values);
|
||||
this._personExists = true;
|
||||
}
|
||||
this._params = undefined;
|
||||
} catch (err) {
|
||||
@@ -427,14 +422,6 @@ class DialogPersonDetail extends LitElement {
|
||||
}
|
||||
|
||||
private _close(): void {
|
||||
// If we do not have a person ID yet (= person creation dialog was just cancelled), but
|
||||
// we already created a user ID for it, delete it now to not have it "free floating".
|
||||
if (!this._personExists && this._userId) {
|
||||
deleteUser(this.hass, this._userId);
|
||||
this._params?.refreshUsers();
|
||||
this._userId = undefined;
|
||||
}
|
||||
|
||||
this._params = undefined;
|
||||
}
|
||||
|
||||
|
@@ -35,7 +35,6 @@ import "../../../components/ha-icon-input";
|
||||
import "../../../components/ha-svg-icon";
|
||||
import "../../../components/ha-yaml-editor";
|
||||
import type { HaYamlEditor } from "../../../components/ha-yaml-editor";
|
||||
import { copyToClipboard } from "../../../common/util/copy-clipboard";
|
||||
import {
|
||||
Action,
|
||||
deleteScript,
|
||||
@@ -546,7 +545,7 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
|
||||
|
||||
private async _copyYaml() {
|
||||
if (this._editor?.yaml) {
|
||||
copyToClipboard(this._editor.yaml);
|
||||
navigator.clipboard.writeText(this._editor.yaml);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -84,7 +84,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
|
||||
${tag.last_scanned_datetime
|
||||
? html`<ha-relative-time
|
||||
.hass=${this.hass}
|
||||
.datetime=${tag.last_scanned_datetime}
|
||||
.datetimeObj=${tag.last_scanned_datetime}
|
||||
></ha-relative-time>`
|
||||
: this.hass.localize("ui.panel.config.tags.never_scanned")}
|
||||
</div>`
|
||||
@@ -103,7 +103,7 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
|
||||
${last_scanned_datetime
|
||||
? html`<ha-relative-time
|
||||
.hass=${this.hass}
|
||||
.datetime=${last_scanned_datetime}
|
||||
.datetimeObj=${last_scanned_datetime}
|
||||
></ha-relative-time>`
|
||||
: this.hass.localize("ui.panel.config.tags.never_scanned")}
|
||||
`,
|
||||
|
@@ -241,7 +241,7 @@ export class DialogAddUser extends LitElement {
|
||||
user = userResponse.user;
|
||||
} catch (err) {
|
||||
this._loading = false;
|
||||
this._error = err.message;
|
||||
this._error = err.code;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ export class DialogAddUser extends LitElement {
|
||||
} catch (err) {
|
||||
await deleteUser(this.hass, user.id);
|
||||
this._loading = false;
|
||||
this._error = err.message;
|
||||
this._error = err.code;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -13,7 +13,6 @@ import {
|
||||
} from "lit-element";
|
||||
import { computeRTLDirection } from "../../../common/util/compute_rtl";
|
||||
import { createCloseHeading } from "../../../components/ha-dialog";
|
||||
import "../../../components/ha-help-tooltip";
|
||||
import "../../../components/ha-formfield";
|
||||
import "../../../components/ha-switch";
|
||||
import { adminChangePassword } from "../../../data/auth";
|
||||
@@ -38,8 +37,6 @@ class DialogUserDetail extends LitElement {
|
||||
|
||||
@internalProperty() private _isAdmin?: boolean;
|
||||
|
||||
@internalProperty() private _isActive?: boolean;
|
||||
|
||||
@internalProperty() private _error?: string;
|
||||
|
||||
@internalProperty() private _params?: UserDetailDialogParams;
|
||||
@@ -51,7 +48,6 @@ class DialogUserDetail extends LitElement {
|
||||
this._error = undefined;
|
||||
this._name = params.entry.name || "";
|
||||
this._isAdmin = params.entry.group_ids.includes(SYSTEM_GROUP_ID_ADMIN);
|
||||
this._isActive = params.entry.is_active;
|
||||
await this.updateComplete;
|
||||
}
|
||||
|
||||
@@ -95,6 +91,15 @@ class DialogUserDetail extends LitElement {
|
||||
</span>
|
||||
`
|
||||
: ""}
|
||||
${user.is_active
|
||||
? html`
|
||||
<span class="state"
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.users.editor.active"
|
||||
)}</span
|
||||
>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
<div class="form">
|
||||
<paper-input
|
||||
@@ -105,21 +110,17 @@ class DialogUserDetail extends LitElement {
|
||||
"ui.panel.config.users.editor.name"
|
||||
)}"
|
||||
></paper-input>
|
||||
<div class="row">
|
||||
<ha-formfield
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.users.editor.admin"
|
||||
)}
|
||||
.dir=${computeRTLDirection(this.hass)}
|
||||
<ha-formfield
|
||||
.label=${this.hass.localize("ui.panel.config.users.editor.admin")}
|
||||
.dir=${computeRTLDirection(this.hass)}
|
||||
>
|
||||
<ha-switch
|
||||
.disabled=${user.system_generated || user.is_owner}
|
||||
.checked=${this._isAdmin}
|
||||
@change=${this._adminChanged}
|
||||
>
|
||||
<ha-switch
|
||||
.disabled=${user.system_generated || user.is_owner}
|
||||
.checked=${this._isAdmin}
|
||||
@change=${this._adminChanged}
|
||||
>
|
||||
</ha-switch>
|
||||
</ha-formfield>
|
||||
</div>
|
||||
</ha-switch>
|
||||
</ha-formfield>
|
||||
${!this._isAdmin
|
||||
? html`
|
||||
<br />
|
||||
@@ -128,27 +129,6 @@ class DialogUserDetail extends LitElement {
|
||||
)}
|
||||
`
|
||||
: ""}
|
||||
<div class="row">
|
||||
<ha-formfield
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.users.editor.active"
|
||||
)}
|
||||
.dir=${computeRTLDirection(this.hass)}
|
||||
>
|
||||
<ha-switch
|
||||
.disabled=${user.system_generated || user.is_owner}
|
||||
.checked=${this._isActive}
|
||||
@change=${this._activeChanged}
|
||||
>
|
||||
</ha-switch>
|
||||
</ha-formfield>
|
||||
<ha-help-tooltip
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.config.users.editor.active_tooltip"
|
||||
)}
|
||||
>
|
||||
</ha-help-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -212,16 +192,11 @@ class DialogUserDetail extends LitElement {
|
||||
this._isAdmin = ev.target.checked;
|
||||
}
|
||||
|
||||
private async _activeChanged(ev): Promise<void> {
|
||||
this._isActive = ev.target.checked;
|
||||
}
|
||||
|
||||
private async _updateEntry() {
|
||||
this._submitting = true;
|
||||
try {
|
||||
await this._params!.updateEntry({
|
||||
name: this._name.trim(),
|
||||
is_active: this._isActive,
|
||||
group_ids: [
|
||||
this._isAdmin ? SYSTEM_GROUP_ID_ADMIN : SYSTEM_GROUP_ID_USER,
|
||||
],
|
||||
@@ -318,13 +293,8 @@ class DialogUserDetail extends LitElement {
|
||||
.state:not(:first-child) {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
padding: 8px 0;
|
||||
}
|
||||
ha-help-tooltip {
|
||||
margin-left: 4px;
|
||||
position: relative;
|
||||
ha-switch {
|
||||
margin-top: 8px;
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
@@ -46,17 +46,10 @@ export class HaConfigUsers extends LitElement {
|
||||
width: "25%",
|
||||
direction: "asc",
|
||||
grows: true,
|
||||
template: (name, user: any) =>
|
||||
narrow
|
||||
? html` ${name}<br />
|
||||
<div class="secondary">
|
||||
${user.username} |
|
||||
${this.hass.localize(`groups.${user.group_ids[0]}`)}
|
||||
</div>`
|
||||
: html` ${name ||
|
||||
this.hass!.localize(
|
||||
"ui.panel.config.users.editor.unnamed_user"
|
||||
)}`,
|
||||
template: (name) => html`
|
||||
${name ||
|
||||
this.hass!.localize("ui.panel.config.users.editor.unnamed_user")}
|
||||
`,
|
||||
},
|
||||
username: {
|
||||
title: this.hass.localize(
|
||||
@@ -66,7 +59,6 @@ export class HaConfigUsers extends LitElement {
|
||||
filterable: true,
|
||||
width: "20%",
|
||||
direction: "asc",
|
||||
hidden: narrow,
|
||||
template: (username) => html`
|
||||
${username ||
|
||||
this.hass!.localize("ui.panel.config.users.editor.unnamed_user")}
|
||||
@@ -79,24 +71,13 @@ export class HaConfigUsers extends LitElement {
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
width: "20%",
|
||||
direction: "asc",
|
||||
hidden: narrow,
|
||||
template: (groupIds) => html`
|
||||
${this.hass.localize(`groups.${groupIds[0]}`)}
|
||||
`,
|
||||
},
|
||||
is_active: {
|
||||
title: this.hass.localize(
|
||||
"ui.panel.config.users.picker.headers.is_active"
|
||||
),
|
||||
type: "icon",
|
||||
sortable: true,
|
||||
filterable: true,
|
||||
width: "80px",
|
||||
template: (is_active) =>
|
||||
is_active ? html`<ha-icon icon="hass:check"> </ha-icon>` : "",
|
||||
},
|
||||
system_generated: {
|
||||
};
|
||||
if (!narrow) {
|
||||
columns.system_generated = {
|
||||
title: this.hass.localize(
|
||||
"ui.panel.config.users.picker.headers.system"
|
||||
),
|
||||
@@ -106,9 +87,8 @@ export class HaConfigUsers extends LitElement {
|
||||
width: "160px",
|
||||
template: (generated) =>
|
||||
generated ? html`<ha-icon icon="hass:check"> </ha-icon>` : "",
|
||||
},
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
return columns;
|
||||
}
|
||||
);
|
||||
|
@@ -84,6 +84,9 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
|
||||
}
|
||||
|
||||
public setConfig(config: ButtonCardConfig): void {
|
||||
if (!config.entity) {
|
||||
throw new Error("Entity must be specified");
|
||||
}
|
||||
if (config.entity && !isValidEntityId(config.entity)) {
|
||||
throw new Error("Invalid entity");
|
||||
}
|
||||
|
@@ -109,7 +109,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
|
||||
}
|
||||
|
||||
public setConfig(config: EntitiesCardConfig): void {
|
||||
if (!config.entities || !Array.isArray(config.entities)) {
|
||||
if (!config || !config.entities.length) {
|
||||
throw new Error("Entities must be specified");
|
||||
}
|
||||
|
||||
|
@@ -2,14 +2,7 @@ import { customElement } from "lit-element";
|
||||
import { HuiButtonCard } from "./hui-button-card";
|
||||
|
||||
@customElement("hui-entity-button-card")
|
||||
class HuiEntityButtonCard extends HuiButtonCard {
|
||||
public setConfig(config): void {
|
||||
if (!config.entity) {
|
||||
throw new Error("Entity must be specified");
|
||||
}
|
||||
super.setConfig(config);
|
||||
}
|
||||
}
|
||||
class HuiEntityButtonCard extends HuiButtonCard {}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
|
@@ -16,6 +16,7 @@ import "../../../components/state-history-charts";
|
||||
import { CacheConfig, getRecentWithCache } from "../../../data/cached-history";
|
||||
import { HistoryResult } from "../../../data/history";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { findEntities } from "../common/find-entites";
|
||||
import { hasConfigOrEntitiesChanged } from "../common/has-changed";
|
||||
import { processConfigEntities } from "../common/process-config-entities";
|
||||
import { EntityConfig } from "../entity-rows/types";
|
||||
@@ -29,9 +30,22 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard {
|
||||
return document.createElement("hui-history-graph-card-editor");
|
||||
}
|
||||
|
||||
public static getStubConfig(): HistoryGraphCardConfig {
|
||||
// Hard coded to sun.sun to prevent high server load when it would pick an entity with a lot of state changes
|
||||
return { type: "history-graph", entities: ["sun.sun"] };
|
||||
public static getStubConfig(
|
||||
hass: HomeAssistant,
|
||||
entities: string[],
|
||||
entitiesFallback: string[]
|
||||
): HistoryGraphCardConfig {
|
||||
const includeDomains = ["sensor"];
|
||||
const maxEntities = 1;
|
||||
const foundEntities = findEntities(
|
||||
hass,
|
||||
maxEntities,
|
||||
entities,
|
||||
entitiesFallback,
|
||||
includeDomains
|
||||
);
|
||||
|
||||
return { type: "history-graph", entities: foundEntities };
|
||||
}
|
||||
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
@@ -57,12 +71,12 @@ export class HuiHistoryGraphCard extends LitElement implements LovelaceCard {
|
||||
}
|
||||
|
||||
public setConfig(config: HistoryGraphCardConfig): void {
|
||||
if (!config.entities || !Array.isArray(config.entities)) {
|
||||
throw new Error("Entities need to be an array");
|
||||
if (!config.entities.length) {
|
||||
throw new Error("Entities must be specified");
|
||||
}
|
||||
|
||||
if (!config.entities.length) {
|
||||
throw new Error("You must include at least one entity");
|
||||
if (config.entities && !Array.isArray(config.entities)) {
|
||||
throw new Error("Entities need to be an array");
|
||||
}
|
||||
|
||||
this._config = config;
|
||||
|
@@ -29,7 +29,7 @@ class HuiHorizontalStackCard extends HuiStackCard {
|
||||
}
|
||||
#root > * {
|
||||
flex: 1 1 0;
|
||||
margin: var(--horizontal-stack-card-margin, var(--stack-card-margin, 0 4px));
|
||||
margin: 0 4px;
|
||||
min-width: 0;
|
||||
}
|
||||
#root > *:first-child {
|
||||
|
@@ -246,73 +246,78 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
||||
${!isUnavailable &&
|
||||
(mediaDescription || stateObj.attributes.media_title || showControls)
|
||||
? html`
|
||||
<div>
|
||||
<div class="title-controls">
|
||||
${!mediaDescription && !stateObj.attributes.media_title
|
||||
? ""
|
||||
: html`
|
||||
<div class="media-info">
|
||||
<hui-marquee
|
||||
.text=${stateObj.attributes.media_title ||
|
||||
mediaDescription}
|
||||
.active=${this._marqueeActive}
|
||||
@mouseover=${this._marqueeMouseOver}
|
||||
@mouseleave=${this._marqueeMouseLeave}
|
||||
></hui-marquee>
|
||||
${!stateObj.attributes.media_title
|
||||
? ""
|
||||
: mediaDescription}
|
||||
</div>
|
||||
`}
|
||||
${!showControls
|
||||
? ""
|
||||
: html`
|
||||
<div class="controls">
|
||||
${controls!.map(
|
||||
(control) => html`
|
||||
<ha-icon-button
|
||||
.title=${this.hass.localize(
|
||||
`ui.card.media_player.${control.action}`
|
||||
)}
|
||||
.icon=${control.icon}
|
||||
action=${control.action}
|
||||
@click=${this._handleClick}
|
||||
></ha-icon-button>
|
||||
`
|
||||
)}
|
||||
${supportsFeature(stateObj, SUPPORT_BROWSE_MEDIA)
|
||||
? html`
|
||||
<mwc-icon-button
|
||||
class="browse-media"
|
||||
.title=${this.hass.localize(
|
||||
"ui.card.media_player.browse_media"
|
||||
)}
|
||||
@click=${this._handleBrowseMedia}
|
||||
><ha-svg-icon
|
||||
.path=${mdiPlayBoxMultiple}
|
||||
></ha-svg-icon
|
||||
></mwc-icon-button>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
${!this._showProgressBar
|
||||
<div
|
||||
class="title-controls"
|
||||
style=${styleMap({
|
||||
paddingRight: isOffState
|
||||
? "0"
|
||||
: `${this._cardHeight - 40}px`,
|
||||
})}
|
||||
>
|
||||
${!mediaDescription && !stateObj.attributes.media_title
|
||||
? ""
|
||||
: html`
|
||||
<paper-progress
|
||||
.max=${stateObj.attributes.media_duration}
|
||||
style=${styleMap({
|
||||
"--paper-progress-active-color":
|
||||
this._foregroundColor || "var(--accent-color)",
|
||||
cursor: supportsFeature(stateObj, SUPPORT_SEEK)
|
||||
? "pointer"
|
||||
: "initial",
|
||||
})}
|
||||
@click=${this._handleSeek}
|
||||
></paper-progress>
|
||||
<div class="media-info">
|
||||
<hui-marquee
|
||||
.text=${stateObj.attributes.media_title ||
|
||||
mediaDescription}
|
||||
.active=${this._marqueeActive}
|
||||
@mouseover=${this._marqueeMouseOver}
|
||||
@mouseleave=${this._marqueeMouseLeave}
|
||||
></hui-marquee>
|
||||
${!stateObj.attributes.media_title
|
||||
? ""
|
||||
: mediaDescription}
|
||||
</div>
|
||||
`}
|
||||
${!showControls
|
||||
? ""
|
||||
: html`
|
||||
<div class="controls">
|
||||
${controls!.map(
|
||||
(control) => html`
|
||||
<ha-icon-button
|
||||
.title=${this.hass.localize(
|
||||
`ui.card.media_player.${control.action}`
|
||||
)}
|
||||
.icon=${control.icon}
|
||||
action=${control.action}
|
||||
@click=${this._handleClick}
|
||||
></ha-icon-button>
|
||||
`
|
||||
)}
|
||||
${supportsFeature(stateObj, SUPPORT_BROWSE_MEDIA)
|
||||
? html`
|
||||
<mwc-icon-button
|
||||
class="browse-media"
|
||||
.title=${this.hass.localize(
|
||||
"ui.card.media_player.browse_media"
|
||||
)}
|
||||
@click=${this._handleBrowseMedia}
|
||||
><ha-svg-icon
|
||||
.path=${mdiPlayBoxMultiple}
|
||||
></ha-svg-icon
|
||||
></mwc-icon-button>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
${!this._showProgressBar
|
||||
? ""
|
||||
: html`
|
||||
<paper-progress
|
||||
.max=${stateObj.attributes.media_duration}
|
||||
style=${styleMap({
|
||||
"--paper-progress-active-color":
|
||||
this._foregroundColor || "var(--accent-color)",
|
||||
cursor: supportsFeature(stateObj, SUPPORT_SEEK)
|
||||
? "pointer"
|
||||
: "initial",
|
||||
})}
|
||||
@click=${this._handleSeek}
|
||||
></paper-progress>
|
||||
`}
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
@@ -630,11 +635,6 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
||||
.player {
|
||||
position: relative;
|
||||
padding: 16px;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
color: var(--text-primary-color);
|
||||
transition-property: color, padding;
|
||||
transition-duration: 0.4s;
|
||||
@@ -671,7 +671,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
||||
|
||||
mwc-icon-button.browse-media {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
right: 0;
|
||||
--mdc-icon-size: 24px;
|
||||
}
|
||||
|
||||
@@ -693,7 +693,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
||||
.more-info {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 4px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.media-info {
|
||||
|
@@ -29,7 +29,7 @@ class HuiVerticalStackCard extends HuiStackCard {
|
||||
height: 100%;
|
||||
}
|
||||
#root > * {
|
||||
margin: var(--vertical-stack-card-margin, var(--stack-card-margin, 4px 0));
|
||||
margin: 4px 0 4px 0;
|
||||
}
|
||||
#root > *:first-child {
|
||||
margin-top: 0;
|
||||
|
@@ -1,8 +1,7 @@
|
||||
import "@material/mwc-button";
|
||||
import "@material/mwc-icon-button";
|
||||
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import { mdiArrowDown, mdiArrowUp, mdiDotsVertical } from "@mdi/js";
|
||||
import "@material/mwc-icon-button";
|
||||
import "../../../components/ha-button-menu";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
@@ -10,20 +9,21 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
queryAssignedNodes,
|
||||
TemplateResult,
|
||||
queryAssignedNodes,
|
||||
} from "lit-element";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import "../../../components/ha-button-menu";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
|
||||
import { swapCard, moveCard, addCard, deleteCard } from "../editor/config-util";
|
||||
import { confDeleteCard } from "../editor/delete-card";
|
||||
import { Lovelace, LovelaceCard } from "../types";
|
||||
import { computeCardSize } from "../common/compute-card-size";
|
||||
import { mdiDotsVertical, mdiArrowDown, mdiArrowUp } from "@mdi/js";
|
||||
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
|
||||
import { showSelectViewDialog } from "../editor/select-view/show-select-view-dialog";
|
||||
import { saveConfig } from "../../../data/lovelace";
|
||||
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { showSaveSuccessToast } from "../../../util/toast-saved-success";
|
||||
import { computeCardSize } from "../common/compute-card-size";
|
||||
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
|
||||
import { addCard, deleteCard, moveCard, swapCard } from "../editor/config-util";
|
||||
import { showSelectViewDialog } from "../editor/select-view/show-select-view-dialog";
|
||||
import { Lovelace, LovelaceCard } from "../types";
|
||||
|
||||
@customElement("hui-card-options")
|
||||
export class HuiCardOptions extends LitElement {
|
||||
@@ -168,7 +168,11 @@ export class HuiCardOptions extends LitElement {
|
||||
}
|
||||
|
||||
private _editCard(): void {
|
||||
fireEvent(this, "ll-edit-card", { path: this.path! });
|
||||
showEditCardDialog(this, {
|
||||
lovelaceConfig: this.lovelace!.config,
|
||||
saveConfig: this.lovelace!.saveConfig,
|
||||
path: this.path!,
|
||||
});
|
||||
}
|
||||
|
||||
private _cardUp(): void {
|
||||
@@ -225,7 +229,7 @@ export class HuiCardOptions extends LitElement {
|
||||
}
|
||||
|
||||
private _deleteCard(): void {
|
||||
fireEvent(this, "ll-delete-card", { path: this.path! });
|
||||
confDeleteCard(this, this.hass!, this.lovelace!, this.path!);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -72,7 +72,7 @@ class HuiMarquee extends LitElement {
|
||||
display: flex;
|
||||
position: relative;
|
||||
align-items: center;
|
||||
height: 1.2em;
|
||||
height: 1em;
|
||||
contain: strict;
|
||||
}
|
||||
|
||||
|
@@ -59,9 +59,6 @@ export class HuiThemeSelectEditor extends LitElement {
|
||||
paper-dropdown-menu {
|
||||
width: 100%;
|
||||
}
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
||||
|
@@ -353,9 +353,11 @@ export class HuiCardPicker extends LitElement {
|
||||
max-width: 500px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: var(--ha-card-border-radius, 4px);
|
||||
border-radius: 4px;
|
||||
border: 1px solid var(--divider-color);
|
||||
background: var(--primary-background-color, #fafafa);
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@@ -373,6 +375,7 @@ export class HuiCardPicker extends LitElement {
|
||||
--ha-card-background,
|
||||
var(--card-background-color, white)
|
||||
);
|
||||
border-radius: 0 0 4px 4px;
|
||||
border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
|
||||
@@ -405,10 +408,6 @@ export class HuiCardPicker extends LitElement {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
box-sizing: border-box;
|
||||
border: var(--ha-card-border-width, 1px) solid
|
||||
var(--ha-card-border-color, var(--divider-color));
|
||||
border-radius: var(--ha-card-border-radius, 4px);
|
||||
}
|
||||
|
||||
.manual {
|
||||
|
@@ -450,10 +450,6 @@ export class HuiDialogEditCard extends LitElement
|
||||
}
|
||||
.element-preview {
|
||||
position: relative;
|
||||
height: max-content;
|
||||
background: var(--primary-background-color);
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.element-preview ha-circular-progress {
|
||||
top: 50%;
|
||||
|
@@ -8,7 +8,7 @@ export interface CreateCardDialogParams {
|
||||
entities?: string[]; // We can pass entity id's that will be added to the config when a card is picked
|
||||
}
|
||||
|
||||
export const importCreateCardDialog = () => import("./hui-dialog-create-card");
|
||||
const importCreateCardDialog = () => import("./hui-dialog-create-card");
|
||||
|
||||
export const showCreateCardDialog = (
|
||||
element: HTMLElement,
|
||||
|
@@ -6,7 +6,7 @@ export interface DeleteCardDialogParams {
|
||||
cardConfig?: LovelaceCardConfig;
|
||||
}
|
||||
|
||||
export const importDeleteCardDialog = () => import("./hui-dialog-delete-card");
|
||||
const importDeleteCardDialog = () => import("./hui-dialog-delete-card");
|
||||
|
||||
export const showDeleteCardDialog = (
|
||||
element: HTMLElement,
|
||||
|
@@ -8,7 +8,7 @@ export interface EditCardDialogParams {
|
||||
cardConfig?: LovelaceCardConfig;
|
||||
}
|
||||
|
||||
export const importEditCardDialog = () => import("./hui-dialog-edit-card");
|
||||
const importEditCardDialog = () => import("./hui-dialog-edit-card");
|
||||
|
||||
export const showEditCardDialog = (
|
||||
element: HTMLElement,
|
||||
|
@@ -115,7 +115,7 @@ export class HuiButtonCardEditor extends LitElement
|
||||
.label="${this.hass.localize(
|
||||
"ui.panel.lovelace.editor.card.generic.entity"
|
||||
)} (${this.hass.localize(
|
||||
"ui.panel.lovelace.editor.card.config.optional"
|
||||
"ui.panel.lovelace.editor.card.config.required"
|
||||
)})"
|
||||
.hass=${this.hass}
|
||||
.value=${this._entity}
|
||||
|
@@ -173,8 +173,8 @@ class LovelaceFullConfigEditor extends LitElement {
|
||||
text: this.hass.localize(
|
||||
"ui.panel.lovelace.editor.raw_editor.confirm_unsaved_changes"
|
||||
),
|
||||
dismissText: this.hass!.localize("ui.common.stay"),
|
||||
confirmText: this.hass!.localize("ui.common.leave"),
|
||||
dismissText: this.hass!.localize("ui.common.leave"),
|
||||
confirmText: this.hass!.localize("ui.common.stay"),
|
||||
}))
|
||||
) {
|
||||
return;
|
||||
|
@@ -793,6 +793,10 @@ class HUIRoot extends LitElement {
|
||||
|
||||
ha-app-layout {
|
||||
min-height: 100%;
|
||||
background: var(
|
||||
--lovelace-background,
|
||||
var(--primary-background-color)
|
||||
);
|
||||
}
|
||||
ha-tabs {
|
||||
width: 100%;
|
||||
@@ -880,12 +884,6 @@ class HUIRoot extends LitElement {
|
||||
.menu-link {
|
||||
text-decoration: none;
|
||||
}
|
||||
hui-view {
|
||||
background: var(
|
||||
--lovelace-background,
|
||||
var(--primary-background-color)
|
||||
);
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
|
@@ -1,10 +1,3 @@
|
||||
// hui-view dependencies for when in edit mode.
|
||||
import "../../../components/ha-fab";
|
||||
import "../components/hui-card-options";
|
||||
import { importCreateCardDialog } from "../editor/card-editor/show-create-card-dialog";
|
||||
import { importDeleteCardDialog } from "../editor/card-editor/show-delete-card-dialog";
|
||||
import { importEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
|
||||
|
||||
importCreateCardDialog();
|
||||
importDeleteCardDialog();
|
||||
importEditCardDialog();
|
||||
|
@@ -10,7 +10,6 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { computeRTL } from "../../../common/util/compute_rtl";
|
||||
import { nextRender } from "../../../common/util/render-status";
|
||||
import "../../../components/entity/ha-state-label-badge";
|
||||
@@ -22,6 +21,7 @@ import type {
|
||||
import type { HomeAssistant } from "../../../types";
|
||||
import type { HuiErrorCard } from "../cards/hui-error-card";
|
||||
import { computeCardSize } from "../common/compute-card-size";
|
||||
import { showCreateCardDialog } from "../editor/card-editor/show-create-card-dialog";
|
||||
import type { Lovelace, LovelaceBadge, LovelaceCard } from "../types";
|
||||
|
||||
let editCodeLoaded = false;
|
||||
@@ -148,7 +148,11 @@ export class MasonryView extends LitElement implements LovelaceViewElement {
|
||||
}
|
||||
|
||||
private _addCard(): void {
|
||||
fireEvent(this, "ll-create-card");
|
||||
showCreateCardDialog(this, {
|
||||
lovelaceConfig: this.lovelace!.config,
|
||||
saveConfig: this.lovelace!.saveConfig,
|
||||
path: [this.index!],
|
||||
});
|
||||
}
|
||||
|
||||
private async _createColumns() {
|
||||
@@ -289,7 +293,7 @@ export class MasonryView extends LitElement implements LovelaceViewElement {
|
||||
|
||||
.column > * {
|
||||
display: block;
|
||||
margin: var(--masonry-view-card-margin, 4px 4px 8px);
|
||||
margin: 4px 4px 8px;
|
||||
}
|
||||
|
||||
ha-fab {
|
||||
|
@@ -20,23 +20,11 @@ import { processConfigEntities } from "../common/process-config-entities";
|
||||
import { createBadgeElement } from "../create-element/create-badge-element";
|
||||
import { createCardElement } from "../create-element/create-card-element";
|
||||
import { createViewElement } from "../create-element/create-view-element";
|
||||
import { showCreateCardDialog } from "../editor/card-editor/show-create-card-dialog";
|
||||
import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog";
|
||||
import { confDeleteCard } from "../editor/delete-card";
|
||||
import type { Lovelace, LovelaceBadge, LovelaceCard } from "../types";
|
||||
|
||||
const DEFAULT_VIEW_LAYOUT = "masonry";
|
||||
const PANEL_VIEW_LAYOUT = "panel";
|
||||
|
||||
declare global {
|
||||
// for fire event
|
||||
interface HASSDomEvents {
|
||||
"ll-create-card": undefined;
|
||||
"ll-edit-card": { path: [number] | [number, number] };
|
||||
"ll-delete-card": { path: [number] | [number, number] };
|
||||
}
|
||||
}
|
||||
|
||||
@customElement("hui-view")
|
||||
export class HUIView extends UpdatingElement {
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
@@ -118,23 +106,6 @@ export class HUIView extends UpdatingElement {
|
||||
|
||||
if (configChanged && !this._layoutElement) {
|
||||
this._layoutElement = createViewElement(viewConfig!);
|
||||
this._layoutElement.addEventListener("ll-create-card", () => {
|
||||
showCreateCardDialog(this, {
|
||||
lovelaceConfig: this.lovelace!.config,
|
||||
saveConfig: this.lovelace!.saveConfig,
|
||||
path: [this.index!],
|
||||
});
|
||||
});
|
||||
this._layoutElement.addEventListener("ll-edit-card", (ev) => {
|
||||
showEditCardDialog(this, {
|
||||
lovelaceConfig: this.lovelace!.config,
|
||||
saveConfig: this.lovelace!.saveConfig,
|
||||
path: ev.detail.path,
|
||||
});
|
||||
});
|
||||
this._layoutElement.addEventListener("ll-delete-card", (ev) => {
|
||||
confDeleteCard(this, this.hass!, this.lovelace!, ev.detail.path);
|
||||
});
|
||||
}
|
||||
|
||||
if (configChanged) {
|
||||
|
154
src/panels/profile/ha-change-password-card.js
Normal file
154
src/panels/profile/ha-change-password-card.js
Normal file
@@ -0,0 +1,154 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-dialog/paper-dialog";
|
||||
import "../../components/ha-circular-progress";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../components/ha-card";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "../../styles/polymer-ha-style";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
*/
|
||||
class HaChangePasswordCard extends LocalizeMixin(PolymerElement) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="ha-style">
|
||||
.error {
|
||||
color: red;
|
||||
}
|
||||
.status {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
.error,
|
||||
.status {
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
}
|
||||
.currentPassword {
|
||||
margin-top: -4px;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<ha-card
|
||||
header="[[localize('ui.panel.profile.change_password.header')]]"
|
||||
>
|
||||
<div class="card-content">
|
||||
<template is="dom-if" if="[[_errorMsg]]">
|
||||
<div class="error">[[_errorMsg]]</div>
|
||||
</template>
|
||||
<template is="dom-if" if="[[_statusMsg]]">
|
||||
<div class="status">[[_statusMsg]]</div>
|
||||
</template>
|
||||
<paper-input
|
||||
class="currentPassword"
|
||||
label="[[localize('ui.panel.profile.change_password.current_password')]]"
|
||||
type="password"
|
||||
value="{{_currentPassword}}"
|
||||
required
|
||||
auto-validate
|
||||
error-message="[[localize('ui.panel.profile.change_password.error_required')]]"
|
||||
></paper-input>
|
||||
<template is="dom-if" if="[[_currentPassword]]">
|
||||
<paper-input
|
||||
label="[[localize('ui.panel.profile.change_password.new_password')]]"
|
||||
type="password"
|
||||
value="{{_password1}}"
|
||||
required
|
||||
auto-validate
|
||||
error-message="[[localize('ui.panel.profile.change_password.error_required')]]"
|
||||
></paper-input>
|
||||
<paper-input
|
||||
label="[[localize('ui.panel.profile.change_password.confirm_new_password')]]"
|
||||
type="password"
|
||||
value="{{_password2}}"
|
||||
required
|
||||
auto-validate
|
||||
error-message="[[localize('ui.panel.profile.change_password.error_required')]]"
|
||||
></paper-input>
|
||||
</template>
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<template is="dom-if" if="[[_loading]]">
|
||||
<div><ha-circular-progress active></ha-circular-progress></div>
|
||||
</template>
|
||||
<template is="dom-if" if="[[!_loading]]">
|
||||
<mwc-button on-click="_changePassword"
|
||||
>[[localize('ui.panel.profile.change_password.submit')]]</mwc-button
|
||||
>
|
||||
</template>
|
||||
</div>
|
||||
</ha-card>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
static get properties() {
|
||||
return {
|
||||
hass: Object,
|
||||
|
||||
_loading: {
|
||||
type: Boolean,
|
||||
value: false,
|
||||
},
|
||||
|
||||
// Error message when can't talk to server etc
|
||||
_statusMsg: String,
|
||||
_errorMsg: String,
|
||||
|
||||
_currentPassword: String,
|
||||
_password1: String,
|
||||
_password2: String,
|
||||
};
|
||||
}
|
||||
|
||||
ready() {
|
||||
super.ready();
|
||||
this.addEventListener("keypress", (ev) => {
|
||||
this._statusMsg = null;
|
||||
if (ev.keyCode === 13) {
|
||||
this._changePassword();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async _changePassword() {
|
||||
this._statusMsg = null;
|
||||
if (!this._currentPassword || !this._password1 || !this._password2) return;
|
||||
|
||||
if (this._password1 !== this._password2) {
|
||||
this._errorMsg = "New password confirmation doesn't match";
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._currentPassword === this._password1) {
|
||||
this._errorMsg = "New password must be different than current password";
|
||||
return;
|
||||
}
|
||||
|
||||
this._loading = true;
|
||||
this._errorMsg = null;
|
||||
|
||||
try {
|
||||
await this.hass.callWS({
|
||||
type: "config/auth_provider/homeassistant/change_password",
|
||||
current_password: this._currentPassword,
|
||||
new_password: this._password1,
|
||||
});
|
||||
|
||||
this.setProperties({
|
||||
_statusMsg: "Password changed successfully",
|
||||
_currentPassword: null,
|
||||
_password1: null,
|
||||
_password2: null,
|
||||
});
|
||||
} catch (err) {
|
||||
this._errorMsg = err.message;
|
||||
}
|
||||
|
||||
this._loading = false;
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-change-password-card", HaChangePasswordCard);
|
@@ -1,195 +0,0 @@
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-dialog/paper-dialog";
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
LitElement,
|
||||
property,
|
||||
PropertyValues,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "@material/mwc-button";
|
||||
import "../../components/ha-circular-progress";
|
||||
import "../../components/ha-card";
|
||||
import { haStyle } from "../../resources/styles";
|
||||
import type { HomeAssistant } from "../../types";
|
||||
|
||||
@customElement("ha-change-password-card")
|
||||
class HaChangePasswordCard extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@internalProperty() private _loading = false;
|
||||
|
||||
@internalProperty() private _statusMsg?: string;
|
||||
|
||||
@internalProperty() private _errorMsg?: string;
|
||||
|
||||
@internalProperty() private _currentPassword?: string;
|
||||
|
||||
@internalProperty() private _password?: string;
|
||||
|
||||
@internalProperty() private _passwordConfirm?: string;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<div>
|
||||
<ha-card
|
||||
.header=${this.hass.localize(
|
||||
"ui.panel.profile.change_password.header"
|
||||
)}
|
||||
>
|
||||
<div class="card-content">
|
||||
${this._errorMsg
|
||||
? html` <div class="error">${this._errorMsg}</div> `
|
||||
: ""}
|
||||
${this._statusMsg
|
||||
? html` <div class="status">${this._statusMsg}</div> `
|
||||
: ""}
|
||||
|
||||
<paper-input
|
||||
id="currentPassword"
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.profile.change_password.current_password"
|
||||
)}
|
||||
type="password"
|
||||
.value=${this._currentPassword}
|
||||
@value-changed=${this._currentPasswordChanged}
|
||||
required
|
||||
></paper-input>
|
||||
|
||||
${this._currentPassword
|
||||
? html` <paper-input
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.profile.change_password.new_password"
|
||||
)}
|
||||
name="password"
|
||||
type="password"
|
||||
.value=${this._password}
|
||||
@value-changed=${this._newPasswordChanged}
|
||||
required
|
||||
auto-validate
|
||||
></paper-input>
|
||||
<paper-input
|
||||
.label=${this.hass.localize(
|
||||
"ui.panel.profile.change_password.confirm_new_password"
|
||||
)}
|
||||
name="passwordConfirm"
|
||||
type="password"
|
||||
.value=${this._passwordConfirm}
|
||||
@value-changed=${this._newPasswordConfirmChanged}
|
||||
required
|
||||
auto-validate
|
||||
></paper-input>`
|
||||
: ""}
|
||||
</div>
|
||||
|
||||
<div class="card-actions">
|
||||
${this._loading
|
||||
? html`<div>
|
||||
<ha-circular-progress active></ha-circular-progress>
|
||||
</div>`
|
||||
: html`<mwc-button
|
||||
@click=${this._changePassword}
|
||||
.disabled=${!this._passwordConfirm}
|
||||
>${this.hass.localize(
|
||||
"ui.panel.profile.change_password.submit"
|
||||
)}</mwc-button
|
||||
>`}
|
||||
</div>
|
||||
</ha-card>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
private _currentPasswordChanged(ev: CustomEvent) {
|
||||
this._currentPassword = ev.detail.value;
|
||||
}
|
||||
|
||||
private _newPasswordChanged(ev: CustomEvent) {
|
||||
this._password = ev.detail.value;
|
||||
}
|
||||
|
||||
private _newPasswordConfirmChanged(ev: CustomEvent) {
|
||||
this._passwordConfirm = ev.detail.value;
|
||||
}
|
||||
|
||||
protected firstUpdated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
this.addEventListener("keypress", (ev) => {
|
||||
this._statusMsg = undefined;
|
||||
if (ev.keyCode === 13) {
|
||||
this._changePassword();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private async _changePassword() {
|
||||
this._statusMsg = undefined;
|
||||
if (!this._currentPassword || !this._password || !this._passwordConfirm) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._password !== this._passwordConfirm) {
|
||||
this._errorMsg = this.hass.localize(
|
||||
"ui.panel.profile.change_password.error_new_mismatch"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._currentPassword === this._password) {
|
||||
this._errorMsg = this.hass.localize(
|
||||
"ui.panel.profile.change_password.error_new_is_old"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
this._loading = true;
|
||||
this._errorMsg = undefined;
|
||||
|
||||
try {
|
||||
await this.hass.callWS({
|
||||
type: "config/auth_provider/homeassistant/change_password",
|
||||
current_password: this._currentPassword,
|
||||
new_password: this._password,
|
||||
});
|
||||
} catch (err) {
|
||||
this._errorMsg = err.message;
|
||||
return;
|
||||
} finally {
|
||||
this._loading = false;
|
||||
}
|
||||
|
||||
this._statusMsg = this.hass.localize(
|
||||
"ui.panel.profile.change_password.success"
|
||||
);
|
||||
this._currentPassword = undefined;
|
||||
this._password = undefined;
|
||||
this._passwordConfirm = undefined;
|
||||
}
|
||||
|
||||
static get styles(): CSSResult[] {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
.error {
|
||||
color: var(--error-color);
|
||||
}
|
||||
.status {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
#currentPassword {
|
||||
margin-top: -8px;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-change-password-card": HaChangePasswordCard;
|
||||
}
|
||||
}
|
@@ -25,7 +25,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
|
||||
>[[localize('ui.panel.profile.push_notifications.header')]]</span
|
||||
>
|
||||
<span slot="description">
|
||||
[[localize(_descrLocalizeKey)]]
|
||||
[[_description(_platformLoaded, _pushSupported)]]
|
||||
<a
|
||||
href="[[_computeDocumentationUrl(hass)]]"
|
||||
target="_blank"
|
||||
@@ -45,10 +45,6 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
|
||||
return {
|
||||
hass: Object,
|
||||
narrow: Boolean,
|
||||
_descrLocalizeKey: {
|
||||
type: String,
|
||||
computed: "_descriptionKey(_platformLoaded, _pushSupported)",
|
||||
},
|
||||
_platformLoaded: {
|
||||
type: Boolean,
|
||||
computed: "_compPlatformLoaded(hass)",
|
||||
@@ -76,7 +72,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
|
||||
return !platformLoaded || !pushSupported_;
|
||||
}
|
||||
|
||||
_descriptionKey(platformLoaded, pushSupported_) {
|
||||
_description(platformLoaded, pushSupported_) {
|
||||
let key;
|
||||
if (!pushSupported_) {
|
||||
key = "error_use_https";
|
||||
@@ -85,7 +81,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
|
||||
} else {
|
||||
key = "description";
|
||||
}
|
||||
return `ui.panel.profile.push_notifications.${key}`;
|
||||
return this.localize(`ui.panel.profile.push_notifications.${key}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -33,8 +33,7 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
duration: 0,
|
||||
dismissable: false,
|
||||
action: {
|
||||
text:
|
||||
this.hass!.localize("ui.notification_toast.dismiss") || "Dismiss",
|
||||
text: this.hass!.localize("ui.notification_toast.dismiss"),
|
||||
action: () => {},
|
||||
},
|
||||
});
|
||||
|
@@ -21,8 +21,7 @@ export const panelTitleMixin = <T extends Constructor<HassBaseEl>>(
|
||||
if (
|
||||
!oldHass ||
|
||||
oldHass.panels !== this.hass.panels ||
|
||||
oldHass.panelUrl !== this.hass.panelUrl ||
|
||||
oldHass.localize !== this.hass.localize
|
||||
oldHass.panelUrl !== this.hass.panelUrl
|
||||
) {
|
||||
setTitle(getPanelTitle(this.hass));
|
||||
}
|
||||
|
@@ -36,8 +36,6 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
// eslint-disable-next-line: variable-name
|
||||
private __coreProgress?: string;
|
||||
|
||||
private __loadedFragmetTranslations: Set<string> = new Set();
|
||||
|
||||
private __loadedTranslations: {
|
||||
// track what things have been loaded
|
||||
[category: string]: LoadedTranslationCategory;
|
||||
@@ -103,7 +101,6 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
document.querySelector("html")!.setAttribute("lang", hass.language);
|
||||
this.style.direction = computeRTL(hass) ? "rtl" : "ltr";
|
||||
this._loadCoreTranslations(hass.language);
|
||||
this.__loadedFragmetTranslations = new Set();
|
||||
this._loadFragmentTranslations(hass.language, hass.panelUrl);
|
||||
}
|
||||
|
||||
@@ -198,31 +195,10 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
language: string,
|
||||
panelUrl: string
|
||||
) {
|
||||
if (!panelUrl) {
|
||||
return;
|
||||
if (translationMetadata.fragments.includes(panelUrl)) {
|
||||
const result = await getTranslation(panelUrl, language);
|
||||
this._updateResources(result.language, result.data);
|
||||
}
|
||||
const panelComponent = this.hass?.panels?.[panelUrl]?.component_name;
|
||||
|
||||
// If it's the first call we don't have panel info yet to check the component.
|
||||
// If the url is not known it might be a custom lovelace dashboard, so we load lovelace translations
|
||||
const fragment = translationMetadata.fragments.includes(
|
||||
panelComponent || panelUrl
|
||||
)
|
||||
? panelComponent || panelUrl
|
||||
: !panelComponent
|
||||
? "lovelace"
|
||||
: undefined;
|
||||
|
||||
if (!fragment) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.__loadedFragmetTranslations.has(fragment)) {
|
||||
return;
|
||||
}
|
||||
this.__loadedFragmetTranslations.add(fragment);
|
||||
const result = await getTranslation(fragment, language);
|
||||
this._updateResources(result.language, result.data);
|
||||
}
|
||||
|
||||
private async _loadCoreTranslations(language: string) {
|
||||
@@ -234,7 +210,7 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
this.__coreProgress = language;
|
||||
try {
|
||||
const result = await getTranslation(null, language);
|
||||
await this._updateResources(result.language, result.data);
|
||||
this._updateResources(result.language, result.data);
|
||||
} finally {
|
||||
this.__coreProgress = undefined;
|
||||
}
|
||||
@@ -250,29 +226,18 @@ export default <T extends Constructor<HassBaseEl>>(superClass: T) =>
|
||||
// before this.hass is even created. In this case our base state comes
|
||||
// from this._pendingHass instead. Otherwise the first set of strings is
|
||||
// overwritten when we call _updateHass the second time!
|
||||
|
||||
// Allow hass to be updated
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
|
||||
if (language !== (this.hass ?? this._pendingHass).language) {
|
||||
// the language was changed, abort
|
||||
return;
|
||||
}
|
||||
|
||||
const baseHass = this.hass ?? this._pendingHass;
|
||||
const resources = {
|
||||
[language]: {
|
||||
...(this.hass ?? this._pendingHass)?.resources?.[language],
|
||||
...baseHass?.resources?.[language],
|
||||
...data,
|
||||
},
|
||||
};
|
||||
const changes: Partial<HomeAssistant> = {
|
||||
resources,
|
||||
localize: await computeLocalize(this, language, resources),
|
||||
};
|
||||
|
||||
if (language === (this.hass ?? this._pendingHass).language) {
|
||||
this._updateHass(changes);
|
||||
const changes: Partial<HomeAssistant> = { resources };
|
||||
if (this.hass && language === this.hass.language) {
|
||||
changes.localize = await computeLocalize(this, language, resources);
|
||||
}
|
||||
this._updateHass(changes);
|
||||
}
|
||||
|
||||
private _refetchCachedHassTranslations(
|
||||
|
@@ -98,8 +98,7 @@
|
||||
"disabled_by": {
|
||||
"user": "User",
|
||||
"integration": "Integration",
|
||||
"config_entry": "Config Entry",
|
||||
"device": "Device"
|
||||
"config_entry": "Config Entry"
|
||||
}
|
||||
},
|
||||
"ui": {
|
||||
@@ -328,7 +327,6 @@
|
||||
"entity-picker": {
|
||||
"entity": "Entity",
|
||||
"clear": "Clear",
|
||||
"no_match": "No matching entities found",
|
||||
"show_entities": "Show entities"
|
||||
},
|
||||
"entity-attribute-picker": {
|
||||
@@ -336,16 +334,6 @@
|
||||
"show_attributes": "Show attributes"
|
||||
}
|
||||
},
|
||||
"target-picker": {
|
||||
"expand_area_id": "Expand this area in the seperate devices and entities that it contains. After expanding it will not update the devices and entities when the area changes.",
|
||||
"expand_device_id": "Expand this device in seperate entities. After expanding it will not update the entities when the device changes.",
|
||||
"remove_area_id": "Remove area",
|
||||
"remove_device_id": "Remove device",
|
||||
"remove_entity_id": "Remove entity",
|
||||
"add_area_id": "Pick area",
|
||||
"add_device_id": "Pick device",
|
||||
"add_entity_id": "Pick entity"
|
||||
},
|
||||
"user-picker": {
|
||||
"no_user": "No user",
|
||||
"add_user": "Add user",
|
||||
@@ -360,8 +348,6 @@
|
||||
"clear": "Clear",
|
||||
"toggle": "Toggle",
|
||||
"show_devices": "Show devices",
|
||||
"no_devices": "You don't have any devices",
|
||||
"no_match": "No matching devices found",
|
||||
"device": "Device",
|
||||
"no_area": "No area"
|
||||
},
|
||||
@@ -370,8 +356,6 @@
|
||||
"show_areas": "Show areas",
|
||||
"area": "Area",
|
||||
"add_new": "Add new area…",
|
||||
"no_areas": "You don't have any areas",
|
||||
"no_match": "No matching areas found",
|
||||
"add_dialog": {
|
||||
"title": "Add new area",
|
||||
"text": "Enter the name of the new area.",
|
||||
@@ -628,8 +612,6 @@
|
||||
"unavailable": "This entity is not currently available.",
|
||||
"enabled_label": "Enable entity",
|
||||
"enabled_cause": "Disabled by {cause}.",
|
||||
"device_disabled": "The device of this entity is disabled.",
|
||||
"open_device_settings": "Open device settings",
|
||||
"enabled_description": "Disabled entities will not be added to Home Assistant.",
|
||||
"enabled_delay_confirm": "The enabled entities will be added to Home Assistant in {delay} seconds",
|
||||
"enabled_restart_confirm": "Restart Home Assistant to finish enabling the entities",
|
||||
@@ -805,7 +787,7 @@
|
||||
},
|
||||
"areas": {
|
||||
"caption": "Areas",
|
||||
"description": "Group devices and entities into areas",
|
||||
"description": "Manage areas in your home",
|
||||
"data_table": {
|
||||
"area": "Area",
|
||||
"devices": "Devices"
|
||||
@@ -835,7 +817,7 @@
|
||||
},
|
||||
"tags": {
|
||||
"caption": "Tags",
|
||||
"description": "Trigger automations when a NFC tag, QR code, etc. is scanned",
|
||||
"description": "Manage tags",
|
||||
"learn_more": "Learn more about tags",
|
||||
"no_tags": "No tags",
|
||||
"add_tag": "Add tag",
|
||||
@@ -854,7 +836,7 @@
|
||||
"new_tag": "New tag",
|
||||
"name": "Name",
|
||||
"description": "Description",
|
||||
"tag_id": "Tag ID",
|
||||
"tag_id": "Tag id",
|
||||
"tag_id_placeholder": "Autogenerated when left empty",
|
||||
"delete": "Delete",
|
||||
"update": "Update",
|
||||
@@ -866,7 +848,7 @@
|
||||
},
|
||||
"helpers": {
|
||||
"caption": "Helpers",
|
||||
"description": "Elements that help build automations",
|
||||
"description": "Manage elements that help build automations",
|
||||
"types": {
|
||||
"input_text": "Text",
|
||||
"input_number": "Number",
|
||||
@@ -894,7 +876,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "General",
|
||||
"description": "Unit system, location, time zone & other general parameters",
|
||||
"description": "Change your general Home Assistant configuration",
|
||||
"section": {
|
||||
"core": {
|
||||
"header": "General Configuration",
|
||||
@@ -923,7 +905,7 @@
|
||||
"caption": "Info",
|
||||
"copy_raw": "Raw Text",
|
||||
"copy_github": "For GitHub",
|
||||
"description": "Version, system health and links to documentation",
|
||||
"description": "View info about your Home Assistant installation",
|
||||
"home_assistant_logo": "Home Assistant logo",
|
||||
"path_configuration": "Path to configuration.yaml: {path}",
|
||||
"developed_by": "Developed by a bunch of awesome people.",
|
||||
@@ -958,7 +940,7 @@
|
||||
},
|
||||
"lovelace": {
|
||||
"caption": "Lovelace Dashboards",
|
||||
"description": "Create customized sets of cards to control your home",
|
||||
"description": "Manage your Lovelace Dashboards",
|
||||
"dashboards": {
|
||||
"default_dashboard": "This is the default dashboard",
|
||||
"caption": "Dashboards",
|
||||
@@ -1049,7 +1031,7 @@
|
||||
"introduction": "Some parts of Home Assistant can reload without requiring a restart. Hitting reload will unload their current YAML configuration and load the new one.",
|
||||
"reload": "Reload {domain}",
|
||||
"core": "Reload location & customizations",
|
||||
"group": "Reload groups, group entities, and group notify services",
|
||||
"group": "Reload groups, group entities, and notify services",
|
||||
"automation": "Reload automations",
|
||||
"script": "Reload scripts",
|
||||
"scene": "Reload scenes",
|
||||
@@ -1062,7 +1044,7 @@
|
||||
"input_select": "Reload input selects",
|
||||
"template": "Reload template entities",
|
||||
"universal": "Reload universal media player entities",
|
||||
"rest": "Reload rest entities, and rest notify services",
|
||||
"rest": "Reload rest entities and notify services",
|
||||
"command_line": "Reload command line entities",
|
||||
"filter": "Reload filter entities",
|
||||
"statistics": "Reload statistics entities",
|
||||
@@ -1113,7 +1095,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automations",
|
||||
"description": "Create custom behavior rules for your home",
|
||||
"description": "Manage automations",
|
||||
"picker": {
|
||||
"header": "Automation Editor",
|
||||
"introduction": "The automation editor allows you to create and edit automations. Please follow the link below to read the instructions to make sure that you have configured Home Assistant correctly.",
|
||||
@@ -1148,7 +1130,7 @@
|
||||
},
|
||||
"editor": {
|
||||
"enable_disable": "Enable/Disable automation",
|
||||
"introduction": "Use automations to bring your home to life.",
|
||||
"introduction": "Use automations to bring your home to live.",
|
||||
"default_name": "New Automation",
|
||||
"load_error_not_editable": "Only automations in automations.yaml are editable.",
|
||||
"load_error_unknown": "Error loading automation ({err_no}).",
|
||||
@@ -1165,6 +1147,8 @@
|
||||
"header": "Blueprint",
|
||||
"blueprint_to_use": "Blueprint to use",
|
||||
"no_blueprints": "You don't have any blueprints",
|
||||
"manage_blueprints": "Manage Blueprints",
|
||||
"inputs": "Inputs",
|
||||
"no_inputs": "This blueprint doesn't have any inputs."
|
||||
},
|
||||
"modes": {
|
||||
@@ -1461,8 +1445,8 @@
|
||||
"description": "Manage blueprints",
|
||||
"overview": {
|
||||
"header": "Blueprint Editor",
|
||||
"introduction": "The blueprint configuration allows you to import and manage your blueprints.",
|
||||
"learn_more": "Learn more about using blueprints",
|
||||
"introduction": "The blueprint editor allows you to create and edit blueprints.",
|
||||
"learn_more": "Learn more about blueprints",
|
||||
"headers": {
|
||||
"name": "Name",
|
||||
"domain": "Domain",
|
||||
@@ -1472,28 +1456,26 @@
|
||||
"confirm_delete_text": "Are you sure you want to delete this blueprint?",
|
||||
"add_blueprint": "Import blueprint",
|
||||
"use_blueprint": "Create automation",
|
||||
"delete_blueprint": "Delete blueprint",
|
||||
"discover_more": "Discover more blueprints"
|
||||
"delete_blueprint": "Delete blueprint"
|
||||
},
|
||||
"add": {
|
||||
"header": "Import a blueprint",
|
||||
"import_header": "Blueprint \"{name}\"",
|
||||
"import_introduction_link": "You can import blueprints of other users from Github and the {community_link}. Enter the URL of the blueprint below.",
|
||||
"community_forums": "community forums",
|
||||
"header": "Add new blueprint",
|
||||
"import_header": "Import \"{name}\" (type: {domain})",
|
||||
"import_introduction": "You can import blueprints of other users from Github and the community forums. Enter the URL of the blueprint below.",
|
||||
"url": "URL of the blueprint",
|
||||
"raw_blueprint": "Blueprint content",
|
||||
"importing": "Loading blueprint...",
|
||||
"import_btn": "Preview blueprint",
|
||||
"saving": "Importing blueprint...",
|
||||
"save_btn": "Import blueprint",
|
||||
"importing": "Importing blueprint...",
|
||||
"import_btn": "Import blueprint",
|
||||
"saving": "Saving blueprint...",
|
||||
"save_btn": "Save blueprint",
|
||||
"error_no_url": "Please enter the URL of the blueprint.",
|
||||
"unsupported_blueprint": "This blueprint is not supported",
|
||||
"file_name": "Blueprint Path"
|
||||
"file_name": "Local blueprint file name"
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
"caption": "Scripts",
|
||||
"description": "Execute a sequence of actions",
|
||||
"description": "Manage scripts",
|
||||
"picker": {
|
||||
"header": "Script Editor",
|
||||
"introduction": "The script editor allows you to create and edit scripts. Please follow the link below to read the instructions to make sure that you have configured Home Assistant correctly.",
|
||||
@@ -1543,7 +1525,7 @@
|
||||
},
|
||||
"scene": {
|
||||
"caption": "Scenes",
|
||||
"description": "Capture device states and easily recall them later",
|
||||
"description": "Manage scenes",
|
||||
"activated": "Activated scene {name}.",
|
||||
"picker": {
|
||||
"header": "Scene Editor",
|
||||
@@ -1562,7 +1544,7 @@
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"introduction": "Use scenes to bring your home to life.",
|
||||
"introduction": "Use scenes to bring your home to live.",
|
||||
"default_name": "New Scene",
|
||||
"load_error_not_editable": "Only scenes in scenes.yaml are editable.",
|
||||
"load_error_unknown": "Error loading scene ({err_no}).",
|
||||
@@ -1589,7 +1571,7 @@
|
||||
"cloud": {
|
||||
"description_login": "Logged in as {email}",
|
||||
"description_not_login": "Not logged in",
|
||||
"description_features": "Control home when away and integrate with Alexa and Google Assistant",
|
||||
"description_features": "Control away from home, integrate with Alexa and Google Assistant.",
|
||||
"login": {
|
||||
"title": "Cloud Login",
|
||||
"introduction": "Home Assistant Cloud provides you with a secure remote connection to your instance while away from home. It also allows you to connect with cloud-only services: Amazon Alexa and Google Assistant.",
|
||||
@@ -1756,27 +1738,18 @@
|
||||
"devices": {
|
||||
"add_prompt": "No {name} have been added using this device yet. You can add one by clicking the + button above.",
|
||||
"caption": "Devices",
|
||||
"description": "Manage configured devices",
|
||||
"description": "Manage connected devices",
|
||||
"device_info": "Device info",
|
||||
"unnamed_device": "Unnamed device",
|
||||
"unknown_error": "Unknown error",
|
||||
"name": "Name",
|
||||
"update": "Update",
|
||||
"no_devices": "No devices",
|
||||
"enabled_label": "Enable device",
|
||||
"enabled_cause": "The device is disabled by {cause}.",
|
||||
"disabled_by": {
|
||||
"user": "User",
|
||||
"integration": "Integration",
|
||||
"config_entry": "Config Entry"
|
||||
},
|
||||
"enabled_description": "Disabled devices will not be shown and entities belonging to the device will be disabled and not added to Home Assistant.",
|
||||
"automation": {
|
||||
"automations": "Automations",
|
||||
"no_automations": "No automations",
|
||||
"unknown_automation": "Unknown automation",
|
||||
"create": "Create automation with device",
|
||||
"create_disable": "Can't create automation with disabled device",
|
||||
"triggers": {
|
||||
"caption": "Do something when...",
|
||||
"no_triggers": "No triggers",
|
||||
@@ -1797,14 +1770,12 @@
|
||||
"script": {
|
||||
"scripts": "Scripts",
|
||||
"no_scripts": "No scripts",
|
||||
"create": "Create script with device",
|
||||
"create_disable": "Can't create script with disabled device"
|
||||
"create": "Create script with device"
|
||||
},
|
||||
"scene": {
|
||||
"scenes": "Scenes",
|
||||
"no_scenes": "No scenes",
|
||||
"create": "Create scene with device",
|
||||
"create_disable": "Can't create scene with disabled device"
|
||||
"create": "Create scene with device"
|
||||
},
|
||||
"cant_edit": "You can only edit items that are created in the UI.",
|
||||
"device_not_found": "Device not found.",
|
||||
@@ -1819,7 +1790,6 @@
|
||||
"scenes": "Scenes",
|
||||
"confirm_rename_entity_ids": "Do you also want to rename the entity IDs of your entities?",
|
||||
"confirm_rename_entity_ids_warning": "This will not change any configuration (like automations, scripts, scenes, dashboards) that is currently using these entities! You will have to update them yourself to use the new entity IDs!",
|
||||
"disabled": "Disabled",
|
||||
"data_table": {
|
||||
"device": "Device",
|
||||
"manufacturer": "Manufacturer",
|
||||
@@ -1827,19 +1797,11 @@
|
||||
"area": "Area",
|
||||
"integration": "Integration",
|
||||
"battery": "Battery",
|
||||
"no_devices": "No devices"
|
||||
"no_devices": "No devices",
|
||||
"no_area": "No area"
|
||||
},
|
||||
"delete": "Delete",
|
||||
"confirm_delete": "Are you sure you want to delete this device?",
|
||||
"picker": {
|
||||
"search": "Search devices",
|
||||
"filter": {
|
||||
"filter": "Filter",
|
||||
"show_disabled": "Show disabled devices",
|
||||
"hidden_devices": "{number} hidden {number, plural,\n one {device}\n other {devices}\n}",
|
||||
"show_all": "Show all"
|
||||
}
|
||||
}
|
||||
"confirm_delete": "Are you sure you want to delete this device?"
|
||||
},
|
||||
"entities": {
|
||||
"caption": "Entities",
|
||||
@@ -1954,7 +1916,7 @@
|
||||
},
|
||||
"integrations": {
|
||||
"caption": "Integrations",
|
||||
"description": "Manage integrations with services, devices, ...",
|
||||
"description": "Manage integrations",
|
||||
"integration": "integration",
|
||||
"discovered": "Discovered",
|
||||
"attention": "Attention required",
|
||||
@@ -2027,7 +1989,7 @@
|
||||
},
|
||||
"users": {
|
||||
"caption": "Users",
|
||||
"description": "Manage the Home Assistant user accounts",
|
||||
"description": "Manage users",
|
||||
"users_privileges_note": "The user group feature is a work in progress. The user will be unable to administer the instance via the UI. We're still auditing all management API endpoints to ensure that they correctly limit access to administrators.",
|
||||
"picker": {
|
||||
"headers": {
|
||||
@@ -2060,8 +2022,7 @@
|
||||
"system_generated_users_not_removable": "Unable to remove system generated users.",
|
||||
"system_generated_users_not_editable": "Unable to update system generated users.",
|
||||
"unnamed_user": "Unnamed User",
|
||||
"confirm_user_deletion": "Are you sure you want to delete {name}?",
|
||||
"active_tooltip": "Controls if user can login"
|
||||
"confirm_user_deletion": "Are you sure you want to delete {name}?"
|
||||
},
|
||||
"add_user": {
|
||||
"caption": "Add user",
|
||||
@@ -2910,10 +2871,7 @@
|
||||
"new_password": "New Password",
|
||||
"confirm_new_password": "Confirm New Password",
|
||||
"error_required": "Required",
|
||||
"submit": "Submit",
|
||||
"error_new_mismatch": "Entered new password values do not match",
|
||||
"error_new_is_old": "New password must be different than current password",
|
||||
"success": "Password changed successfully"
|
||||
"submit": "Submit"
|
||||
},
|
||||
"mfa": {
|
||||
"header": "Multi-factor Authentication Modules",
|
||||
|
@@ -437,7 +437,6 @@
|
||||
"add_new": "إضافة منطقة جديدة ...",
|
||||
"area": "المنطقة",
|
||||
"clear": "مسح",
|
||||
"no_match": "لم يتم العثور على مناطق مطابقة",
|
||||
"show_areas": "إظهار المناطق"
|
||||
},
|
||||
"data-table": {
|
||||
@@ -450,7 +449,6 @@
|
||||
},
|
||||
"device-picker": {
|
||||
"no_area": "لا مجال",
|
||||
"no_match": "لم يتم العثور على أجهزة مطابقة",
|
||||
"toggle": "تبديل"
|
||||
},
|
||||
"entity": {
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -2,13 +2,11 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Entrada de configuració",
|
||||
"device": "Dispositiu",
|
||||
"integration": "Integració",
|
||||
"user": "Usuari"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"owner": "Propietari",
|
||||
"system-admin": "Administradors",
|
||||
"system-read-only": "Usuaris de només lectura",
|
||||
"system-users": "Usuaris"
|
||||
@@ -547,14 +545,12 @@
|
||||
"add_new": "Afegir àrea nova...",
|
||||
"area": "Àrea",
|
||||
"clear": "Esborra",
|
||||
"no_areas": "No tens cap àrea",
|
||||
"no_match": "No s'han trobat àrees coincidents",
|
||||
"show_areas": "Mostra àrees"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Afegeix usuari",
|
||||
"remove_user": "Elimina usuari",
|
||||
"select_blueprint": "Selecciona un blueprint"
|
||||
"select_blueprint": "Selecciona un plànol"
|
||||
},
|
||||
"data-table": {
|
||||
"no-data": "No hi ha dades",
|
||||
@@ -569,8 +565,6 @@
|
||||
"clear": "Esborra",
|
||||
"device": "Dispositiu",
|
||||
"no_area": "Sense àrees",
|
||||
"no_devices": "No tens cap dispositiu",
|
||||
"no_match": "No s'han trobat dispositius coincidents",
|
||||
"show_devices": "Mostra dispositius",
|
||||
"toggle": "Commuta"
|
||||
},
|
||||
@@ -582,7 +576,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Esborra",
|
||||
"entity": "Entitat",
|
||||
"no_match": "No s'han trobat entitats coincidents",
|
||||
"show_entities": "Mostra entitats"
|
||||
}
|
||||
},
|
||||
@@ -716,16 +709,6 @@
|
||||
"service-picker": {
|
||||
"service": "Servei"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Selecciona àrea",
|
||||
"add_device_id": "Selecciona dispositiu",
|
||||
"add_entity_id": "Selecciona entitat",
|
||||
"expand_area_id": "Expandeix aquesta àrea en els dispositius i entitats que conté. Després d'expandir-la, no s'actualitzaran els dispositius i les entitats quan l'àrea canviï.",
|
||||
"expand_device_id": "Expandeix aquest dispositiu en entitats separades. Després d'expandir-lo, no s'actualitzaran les entitats quan el dispositiu canviï.",
|
||||
"remove_area_id": "Elimina àrea",
|
||||
"remove_device_id": "Elimina dispositiu",
|
||||
"remove_entity_id": "Elimina entitat"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Afegeix usuari",
|
||||
"no_user": "Cap usuari",
|
||||
@@ -749,7 +732,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Estàs segur que vols eliminar aquesta entrada?",
|
||||
"delete": "Elimina",
|
||||
"device_disabled": "El dispositiu d'aquesta entitat està desactivat.",
|
||||
"enabled_cause": "Desactivada per {cause}.",
|
||||
"enabled_delay_confirm": "Les entitats activades s'afegiran a Home Assistant d'aquí a {delay} segons",
|
||||
"enabled_description": "Les entitats desactivades no s'afegiran a Home Assistant.",
|
||||
@@ -760,7 +742,6 @@
|
||||
"icon_error": "Els icones han de tenir el format 'prefix:nom_icona', per exemple: 'mdi:home'",
|
||||
"name": "Nom",
|
||||
"note": "Nota: podria no funcionar amb alguna de les integracions.",
|
||||
"open_device_settings": "Obre la configuració del dispositiu",
|
||||
"unavailable": "Aquesta entitat no està disponible actualment.",
|
||||
"update": "Actualitza"
|
||||
},
|
||||
@@ -901,7 +882,7 @@
|
||||
"navigation": {
|
||||
"areas": "Àrees",
|
||||
"automation": "Automatització",
|
||||
"blueprint": "Blueprints",
|
||||
"blueprint": "Plànols",
|
||||
"core": "General",
|
||||
"customize": "Personalització",
|
||||
"devices": "Dispositius",
|
||||
@@ -1048,7 +1029,7 @@
|
||||
"confirmation_text": "Tots els dispositius d'aquesta àrea quedaran sense assignar.",
|
||||
"confirmation_title": "Estàs segur que vols eliminar aquesta àrea?"
|
||||
},
|
||||
"description": "Agrupa dispositius i entitats en àrees",
|
||||
"description": "Gestiona les àrees de la casa",
|
||||
"editor": {
|
||||
"area_id": "ID d'àrea",
|
||||
"create": "Crea",
|
||||
@@ -1070,10 +1051,10 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automatització",
|
||||
"description": "Crea regles de comportament personalitzades per a casa teva",
|
||||
"description": "Gestiona les automatitzacions",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Utilitza un blueprint"
|
||||
"use_blueprint": "Utilitza un plànol"
|
||||
},
|
||||
"header": "Creació d'una nova automatització",
|
||||
"how": "Com vols crear la nova automatització?",
|
||||
@@ -1166,12 +1147,12 @@
|
||||
},
|
||||
"alias": "Nom",
|
||||
"blueprint": {
|
||||
"blueprint_to_use": "Blueprint a utilitzar",
|
||||
"header": "Blueprint",
|
||||
"blueprint_to_use": "Plànol a utilitzar",
|
||||
"header": "Plànol",
|
||||
"inputs": "Entrades",
|
||||
"manage_blueprints": "Gestiona els blueprints",
|
||||
"no_blueprints": "No tens blueprints",
|
||||
"no_inputs": "Aquest blueprint no té entrades."
|
||||
"manage_blueprints": "Gestiona els plànols",
|
||||
"no_blueprints": "No tens plànols",
|
||||
"no_inputs": "Aquest plànol no té entrades."
|
||||
},
|
||||
"conditions": {
|
||||
"add": "Afegir condició",
|
||||
@@ -1258,7 +1239,7 @@
|
||||
"edit_ui": "Edita a través d'interfície",
|
||||
"edit_yaml": "Edita com a YAML",
|
||||
"enable_disable": "Activa/desactiva automatització",
|
||||
"introduction": "Utilitza les automatitzacions per donar vida a casa teva.",
|
||||
"introduction": "Utilitza les automatitzacions per donar més vida a la teva casa",
|
||||
"load_error_not_editable": "Només es poden editar les automatitzacions de l'arxiu automations.yaml.",
|
||||
"load_error_unknown": "Error en carregar l'automatització ({err_no}).",
|
||||
"max": {
|
||||
@@ -1417,38 +1398,29 @@
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "fòrums de la comunitat",
|
||||
"error_no_url": "Introdueix l'URL del blueprint.",
|
||||
"file_name": "Directori del blueprint",
|
||||
"header": "Importa un blueprint nou",
|
||||
"import_btn": "Vista prèvia del blueprint",
|
||||
"import_header": "Blueprint \"{name}\"",
|
||||
"import_introduction": "Pots importar blueprints d'altres usuaris des de Github i els fòrums de la comunitat. Introdueix, a sota, l'URL del blueprint.",
|
||||
"import_introduction_link": "Pots importar blueprints d'altres usuaris des de Github i des dels {community_link}. Introdueix, a sota, l'URL del blueprint.",
|
||||
"importing": "Carregant blueprint...",
|
||||
"raw_blueprint": "Contingut del blueprint",
|
||||
"save_btn": "Importa blueprint",
|
||||
"saving": "Important blueprint...",
|
||||
"unsupported_blueprint": "Aquest blueprint no és compatible",
|
||||
"url": "URL del blueprint"
|
||||
"error_no_url": "Introdueix l'URL del plànol.",
|
||||
"header": "Afegiu plànol nou",
|
||||
"import_btn": "Importa plànol",
|
||||
"import_header": "Importa {name} ({domain})",
|
||||
"import_introduction": "Pots importar plànols d'altres usuaris des de Github i els fòrums de la comunitat. Introdueix, a sota, l'URL del plànol.",
|
||||
"importing": "Important plànol",
|
||||
"save_btn": "Desa plànol",
|
||||
"saving": "Desant plànol...",
|
||||
"unsupported_blueprint": "Aquest plànols no és compatible",
|
||||
"url": "URL del plànol"
|
||||
},
|
||||
"caption": "Blueprints",
|
||||
"description": "Gestiona els blueprints",
|
||||
"caption": "Plànols",
|
||||
"description": "Gestiona els plànols",
|
||||
"overview": {
|
||||
"add_blueprint": "Importa blueprint",
|
||||
"confirm_delete_header": "Eliminar aquest blueprint?",
|
||||
"confirm_delete_text": "Segur que vols eliminar aquest blueprint?",
|
||||
"delete_blueprint": "Elimina blueprint",
|
||||
"discover_more": "Descobreix més blueprints",
|
||||
"header": "Editor de blueprints",
|
||||
"add_blueprint": "Afegiu plànol",
|
||||
"confirm_delete_header": "Eliminar aquest plànol?",
|
||||
"confirm_delete_text": "Segur que vols eliminar aquest plànol?",
|
||||
"header": "Editor de plànols",
|
||||
"headers": {
|
||||
"domain": "Domini",
|
||||
"file_name": "Nom de l'arxiu",
|
||||
"name": "Nom"
|
||||
},
|
||||
"introduction": "La configuració dels blueprints et permet importar-ne i gestionar-los.",
|
||||
"learn_more": "Més informació sobre l'ús dels blueprints",
|
||||
"use_blueprint": "Crea automatització"
|
||||
"introduction": "L'editor de plànols et permet crear i editar plànols.",
|
||||
"learn_more": "Més informació sobre els plànols"
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
@@ -1531,7 +1503,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Controla la casa quan siguis fora i integra-hi Alexa i Google Assistant",
|
||||
"description_features": "Controla la casa des de fora, pots integrar Alexa i Google Assistant.",
|
||||
"description_login": "Sessió iniciada com a {email}",
|
||||
"description_not_login": "No has iniciat sessió",
|
||||
"dialog_certificate": {
|
||||
@@ -1626,7 +1598,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "General",
|
||||
"description": "Sistema d'unitats, ubicació, zona horària i altres paràmetres generals",
|
||||
"description": "Canvia la configuració general de Home Assistant",
|
||||
"section": {
|
||||
"core": {
|
||||
"core_config": {
|
||||
@@ -1688,7 +1660,6 @@
|
||||
"unknown_condition": "Condició desconeguda"
|
||||
},
|
||||
"create": "Crea una automatització amb el dispositiu",
|
||||
"create_disable": "No es pot crear una automatització amb dispositius desactivats",
|
||||
"no_automations": "No hi ha automatitzacions",
|
||||
"no_device_automations": "No hi ha automatitzacions disponibles per a aquest dispositiu.",
|
||||
"triggers": {
|
||||
@@ -1714,18 +1685,9 @@
|
||||
"no_devices": "Sense dispositius"
|
||||
},
|
||||
"delete": "Elimina",
|
||||
"description": "Gestiona els dispositius configurats",
|
||||
"description": "Gestiona els dispositius connectats",
|
||||
"device_info": "Informació del dispositiu",
|
||||
"device_not_found": "Dispositiu no trobat.",
|
||||
"disabled": "Desactivat",
|
||||
"disabled_by": {
|
||||
"config_entry": "Entrada de configuració",
|
||||
"integration": "Integració",
|
||||
"user": "Usuari"
|
||||
},
|
||||
"enabled_cause": "El dispositiu està desactivat per {cause}.",
|
||||
"enabled_description": "Els dispositius desactivats no es mostraran i les entitats que hi pertanyin es desactivaran i no s'afegiran a Home Assistant.",
|
||||
"enabled_label": "Activa dispositiu",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Afegeix a Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {entitat desabilitada}\n other {entitats desabilitades}\n}",
|
||||
@@ -1735,25 +1697,14 @@
|
||||
},
|
||||
"name": "Nom",
|
||||
"no_devices": "No hi ha dispositius",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtre",
|
||||
"hidden_devices": "{number} {number, plural,\n one {dispositiu amagat}\n other {dispositius amagats}\n}",
|
||||
"show_all": "Mostra-ho tot",
|
||||
"show_disabled": "Mostra dispositius desactivats"
|
||||
},
|
||||
"search": "Cerca dispositius"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Crea una escena amb el dispositiu",
|
||||
"create_disable": "No es pot crear una escena amb dispositius desactivats",
|
||||
"no_scenes": "No hi ha escenes",
|
||||
"scenes": "Escenes"
|
||||
},
|
||||
"scenes": "Escenes",
|
||||
"script": {
|
||||
"create": "Crea un programa (script) amb el dispositiu",
|
||||
"create_disable": "No es pot crear un script amb dispositius desactivats",
|
||||
"no_scripts": "No hi ha scripts",
|
||||
"scripts": "Scripts"
|
||||
},
|
||||
@@ -1786,7 +1737,6 @@
|
||||
},
|
||||
"header": "Entitats",
|
||||
"headers": {
|
||||
"area": "Àrea",
|
||||
"entity_id": "ID de l'entitat",
|
||||
"integration": "Integració",
|
||||
"name": "Nom",
|
||||
@@ -1819,7 +1769,7 @@
|
||||
"header": "Configuració de Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Ajudants",
|
||||
"description": "Elements útils per a construir automatitzacions",
|
||||
"description": "Gestiona elements útils per a construir automatitzacions",
|
||||
"dialog": {
|
||||
"add_helper": "Afegeix ajudant",
|
||||
"add_platform": "Afegeix {platform}",
|
||||
@@ -1851,7 +1801,7 @@
|
||||
"copy_github": "Per GitHub",
|
||||
"copy_raw": "Text en brut",
|
||||
"custom_uis": "Interfícies d'usuari personalitzades:",
|
||||
"description": "Versió, estat del sistema i enllaços a la documentació",
|
||||
"description": "Consulta informació de la teva instal·lació de Home Assistant",
|
||||
"developed_by": "Desenvolupat per un munt de gent fantàstica.",
|
||||
"documentation": "Documentació",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1957,7 +1907,7 @@
|
||||
},
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurades",
|
||||
"description": "Gestiona les integracions amb serveis, dispositius, ...",
|
||||
"description": "Gestiona les integracions",
|
||||
"details": "Detalls de la integració",
|
||||
"discovered": "Descobertes",
|
||||
"home_assistant_website": "lloc web de Home Assistant",
|
||||
@@ -2042,7 +1992,7 @@
|
||||
"open": "Obrir"
|
||||
}
|
||||
},
|
||||
"description": "Crea conjunts de panells personalitzats per controlar la teva casa",
|
||||
"description": "Gestiona els teus panells Lovelace",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Estàs utilitzant Lovelace en mode YAML per tant no pots gestionar els recursos des de la interfície d'usuari. Els pots gestionar des del fitxer 'configuration.yaml'.",
|
||||
"caption": "Recursos",
|
||||
@@ -2185,7 +2135,7 @@
|
||||
"refresh_node": {
|
||||
"battery_note": "Si el node funciona amb bateria, assegura't de que estigui actiu abans de continuar",
|
||||
"button": "Actualitza node",
|
||||
"complete": "Actualització del node completada",
|
||||
"complete": "Actualització del node completa",
|
||||
"description": "Això farà que OpenZWave torni a consultar el node i n'actualitzi les classes de comandes, funcions i valors.",
|
||||
"node_status": "Estat del node",
|
||||
"refreshing_description": "Actualitzant la informació del node...",
|
||||
@@ -2241,7 +2191,7 @@
|
||||
"scene": {
|
||||
"activated": "Escena {name} activada.",
|
||||
"caption": "Escenes",
|
||||
"description": "Captura els estats dels dispositius i recorda'ls més tard",
|
||||
"description": "Gestiona les escenes",
|
||||
"editor": {
|
||||
"default_name": "Nova escena",
|
||||
"devices": {
|
||||
@@ -2259,7 +2209,7 @@
|
||||
"without_device": "Entitats sense dispositiu"
|
||||
},
|
||||
"icon": "Icona",
|
||||
"introduction": "Utilitza les escenes per donar més vida a la teva casa.",
|
||||
"introduction": "Utilitza les escenes per donar més vida a la teva llar.",
|
||||
"load_error_not_editable": "Només es poden editar les escenes de l'arxiu scenes.yaml.",
|
||||
"load_error_unknown": "Error en carregar l'escena ({err_no}).",
|
||||
"name": "Nom",
|
||||
@@ -2285,7 +2235,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Programació (scripts)",
|
||||
"description": "Executa una seqüència d'accions",
|
||||
"description": "Gestiona els programes (scripts)",
|
||||
"editor": {
|
||||
"alias": "Nom",
|
||||
"default_name": "Nou script",
|
||||
@@ -2396,7 +2346,7 @@
|
||||
"confirm_remove": "Estàs segur que vols eliminar l'etiqueta {tag}?",
|
||||
"confirm_remove_title": "Elimina l'etiqueta?",
|
||||
"create_automation": "Crea una automatització amb una etiqueta",
|
||||
"description": "Dispara automatitzacions quan una etiqueta NFC, un codi QR, etc; s'escanegi",
|
||||
"description": "Gestiona les etiquetes",
|
||||
"detail": {
|
||||
"companion_apps": "aplicacions de companion",
|
||||
"create": "Crea",
|
||||
@@ -2431,11 +2381,10 @@
|
||||
"username": "Nom d'usuari"
|
||||
},
|
||||
"caption": "Usuaris",
|
||||
"description": "Gestiona els comptes d'usuari de Home Assistant",
|
||||
"description": "Gestiona els usuaris",
|
||||
"editor": {
|
||||
"activate_user": "Activar usuari",
|
||||
"active": "Actiu",
|
||||
"active_tooltip": "Controla si l'usuari pot iniciar sessió",
|
||||
"admin": "Administrador",
|
||||
"caption": "Mostra usuari",
|
||||
"change_password": "Canviar contrasenya",
|
||||
@@ -2444,7 +2393,7 @@
|
||||
"delete_user": "Eliminar usuari",
|
||||
"group": "Grup",
|
||||
"id": "ID",
|
||||
"name": "Nom de visualització",
|
||||
"name": "Nom",
|
||||
"new_password": "Nova contrasenya",
|
||||
"owner": "Propietari",
|
||||
"password_changed": "La contrasenya s'ha canviat correctament",
|
||||
@@ -2452,24 +2401,19 @@
|
||||
"system_generated_users_not_editable": "No es poden actualitzar usuaris generats pel sistema.",
|
||||
"system_generated_users_not_removable": "No es poden eliminar usuaris generats pel sistema.",
|
||||
"unnamed_user": "Usuari sense nom",
|
||||
"update_user": "Actualitza",
|
||||
"username": "Nom d'usuari"
|
||||
"update_user": "Actualitza"
|
||||
},
|
||||
"picker": {
|
||||
"add_user": "Afegeix usuari",
|
||||
"headers": {
|
||||
"group": "Grup",
|
||||
"is_active": "Actiu",
|
||||
"is_owner": "Propietari",
|
||||
"name": "Nom de visualització",
|
||||
"system": "Generat pel sistema",
|
||||
"username": "Nom d'usuari"
|
||||
"name": "Nom",
|
||||
"system": "Sistema"
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "El grup d'usuaris encara no està del tot acabat. L'usuari no podrà administrar la instància a través de la interfície d'usuari. Encara estem verificant tots els punts de l'API de gestió per assegurar-nos que limiten correctament l'accés als administradors."
|
||||
},
|
||||
"zha": {
|
||||
"add_device": "Afegeix dispositiu",
|
||||
"add_device_page": {
|
||||
"discovered_text": "Els dispositius apareixeran aquí un cop descoberts.",
|
||||
"discovery_text": "Els dispositius descoberts apareixeran aquí. Segueix les instruccions del/s teu/s dispositiu/s i posa el dispositiu/s en mode d'emparellament.",
|
||||
@@ -2515,16 +2459,6 @@
|
||||
"value": "Valor"
|
||||
},
|
||||
"description": "Gestiona la xarxa domòtica Zigbee (ZHA)",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Configuració completada",
|
||||
"CONFIGURED_status_text": "Inicialitzant",
|
||||
"INITIALIZED": "Inicialització completada",
|
||||
"INITIALIZED_status_text": "El dispositiu està llest per a utilitzar-se",
|
||||
"INTERVIEW_COMPLETE": "Consulta completada",
|
||||
"INTERVIEW_COMPLETE_status_text": "Configurant",
|
||||
"PAIRED": "Dispositiu trobat",
|
||||
"PAIRED_status_text": "Iniciant consulta"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Domòtica Zigbee (ZHA) - Dispositiu"
|
||||
},
|
||||
@@ -2540,7 +2474,6 @@
|
||||
"unbind_button_label": "Desvincula grup"
|
||||
},
|
||||
"groups": {
|
||||
"add_group": "Afegeix grup",
|
||||
"add_members": "Afegeix membres",
|
||||
"adding_members": "Afegint membres",
|
||||
"caption": "Grups",
|
||||
@@ -2583,11 +2516,7 @@
|
||||
"hint_wakeup": "Alguns dispositius com els sensors Xiaomi tenen un botó per despertar-los que pots prémer a intervals de 5 segons per mantenir-los desperts mentre hi interactues.",
|
||||
"introduction": "Executa comandes ZHA que afecten un sol dispositiu. Tria un dispositiu per veure el seu llistat de comandes disponibles."
|
||||
},
|
||||
"title": "Domòtica Zigbee (ZHA)",
|
||||
"visualization": {
|
||||
"caption": "Visualització",
|
||||
"header": "Visualització de xarxa"
|
||||
}
|
||||
"title": "Domòtica Zigbee (ZHA)"
|
||||
},
|
||||
"zone": {
|
||||
"add_zone": "Afegeix zona",
|
||||
@@ -3187,7 +3116,7 @@
|
||||
"close": "Tanca",
|
||||
"empty_config": "Comença amb un panell buit",
|
||||
"header": "Pren el control de la interfície d'usuari Lovelace",
|
||||
"para": "Aquest panell Lovelace està gestionat per Home Assistant. S'actualitza automàticament quan hi ha noves entitats o nous components de Lovelace disponibles. Si prens el control, aquest panell no s'actualitzarà automàticament. Sempre pots crear un nou panell a configuració i fer-hi proves.",
|
||||
"para": "Aquest panell Lovelace s'està gestionant per Home Assistant. S'actualitza automàticament quan hi ha noves entitats o nous components de Lovelace disponibles. Si prens el control, aquest panell no s'actualitzarà automàticament. Sempre pots crear un nou panell a configuració i fer-hi proves.",
|
||||
"para_sure": "Estàs segur que vols prendre el control de la interfície d'usuari?",
|
||||
"save": "Prendre el control",
|
||||
"yaml_config": "Per ajudar a familiaritzar-te, aquí tens la configuració actual del teu panell Lovelace:",
|
||||
@@ -3454,13 +3383,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Confirmar contrasenya nova",
|
||||
"current_password": "Contrasenya actual",
|
||||
"error_new_is_old": "La contrasenya nova ha de ser diferent de la contrasenya actual",
|
||||
"error_new_mismatch": "Els valors introduïts de la nova contrasenya no coincideixen",
|
||||
"error_required": "Obligatori",
|
||||
"header": "Canvi de contrasenya",
|
||||
"new_password": "Contrasenya nova",
|
||||
"submit": "Envia",
|
||||
"success": "La contrasenya s'ha canviat correctament"
|
||||
"submit": "Envia"
|
||||
},
|
||||
"current_user": "Has iniciat la sessió com a {fullName}.",
|
||||
"customize_sidebar": {
|
||||
|
@@ -2,7 +2,6 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Položka nastavení",
|
||||
"device": "Zařízení",
|
||||
"integration": "Integrace",
|
||||
"user": "Uživatel"
|
||||
}
|
||||
@@ -547,14 +546,11 @@
|
||||
"add_new": "Přidat novou oblast ...",
|
||||
"area": "Oblast",
|
||||
"clear": "Vymazat",
|
||||
"no_areas": "Nemáte žádné oblasti",
|
||||
"no_match": "Nebyly nalezeny žádné odpovídající oblasti",
|
||||
"show_areas": "Zobrazit oblasti"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Přidat uživatele",
|
||||
"remove_user": "Odebrat uživatele",
|
||||
"select_blueprint": "Vyberte šablonu"
|
||||
"remove_user": "Odebrat uživatele"
|
||||
},
|
||||
"data-table": {
|
||||
"no-data": "Žádná data",
|
||||
@@ -569,8 +565,6 @@
|
||||
"clear": "Zrušit",
|
||||
"device": "Zařízení",
|
||||
"no_area": "Žádná oblast",
|
||||
"no_devices": "Nemáte žádná zařízení",
|
||||
"no_match": "Nebyla nalezena žádná odpovídající zařízení",
|
||||
"show_devices": "Zobrazit zařízení",
|
||||
"toggle": "Přepnout"
|
||||
},
|
||||
@@ -582,7 +576,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Zrušit",
|
||||
"entity": "Entita",
|
||||
"no_match": "Nebyly nalezeny žádné odpovídající entity",
|
||||
"show_entities": "Zobrazit entity"
|
||||
}
|
||||
},
|
||||
@@ -716,16 +709,6 @@
|
||||
"service-picker": {
|
||||
"service": "Služba"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Vyberte oblast",
|
||||
"add_device_id": "Vyberte zařízení",
|
||||
"add_entity_id": "Vyberte entitu",
|
||||
"expand_area_id": "Rozdělit tuto oblast na jednotlivá zařízení a entity, které obsahuje. Po rozdělení nebudou zařízení a entity aktualizovány, pokud dojde ke změnám oblasti.",
|
||||
"expand_device_id": "Rozdělit toto zařízení na jednotlivé entity. Po rozdělení nebudou entity aktualizovány, pokud dojde ke změnám zařízení.",
|
||||
"remove_area_id": "Odebrat oblast",
|
||||
"remove_device_id": "Odebrat zařízení",
|
||||
"remove_entity_id": "Odebrat entitu"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Přidat uživatele",
|
||||
"no_user": "Žádný uživatel",
|
||||
@@ -749,7 +732,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Opravdu chcete tuto položku smazat?",
|
||||
"delete": "Odstranit",
|
||||
"device_disabled": "Zařízení této entity je zakázáno.",
|
||||
"enabled_cause": "Zakázáno {cause}.",
|
||||
"enabled_delay_confirm": "Povolené entity budou přidány do Home Assistant za {delay} sekund",
|
||||
"enabled_description": "Zakázané entity nebudou přidány do Home Assistant.",
|
||||
@@ -760,7 +742,6 @@
|
||||
"icon_error": "Ikony by měly být ve formátu 'prefix:nazevikony', např. 'mdi:home'",
|
||||
"name": "Jméno",
|
||||
"note": "Poznámka: U všech integrací to ještě nemusí fungovat.",
|
||||
"open_device_settings": "Otevřít nastavení zařízení",
|
||||
"unavailable": "Tato entita není momentálně k dispozici.",
|
||||
"update": "Aktualizovat"
|
||||
},
|
||||
@@ -901,7 +882,6 @@
|
||||
"navigation": {
|
||||
"areas": "Oblasti",
|
||||
"automation": "Automatizace",
|
||||
"blueprint": "Šablony",
|
||||
"core": "Obecné",
|
||||
"customize": "Přizpůsobení",
|
||||
"devices": "Zařízení",
|
||||
@@ -910,7 +890,7 @@
|
||||
"info": "Informace",
|
||||
"integrations": "Integrace",
|
||||
"logs": "Logy",
|
||||
"lovelace": "Ovládací panely Lovelace",
|
||||
"lovelace": "Lovelace Dashboardy",
|
||||
"navigate_to": "Přejít na {panel}",
|
||||
"navigate_to_config": "Přejít na nastavení {panel}",
|
||||
"person": "Osoby",
|
||||
@@ -973,7 +953,7 @@
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"add": "Přidejte zařízení prostřednictvím tohoto zařízení",
|
||||
"clusters": "Správa clusterů",
|
||||
"clusters": "Clustery",
|
||||
"reconfigure": "Přenastavit zařízení",
|
||||
"remove": "Odebrat zařízení",
|
||||
"zigbee_information": "Podpis zařízení Zigbee"
|
||||
@@ -1048,7 +1028,7 @@
|
||||
"confirmation_text": "Všechna zařízení v této oblasti budou nastavena jako nepřiřazena.",
|
||||
"confirmation_title": "Opravdu chcete tuto oblast smazat?"
|
||||
},
|
||||
"description": "Seskupte zařízení a entity do oblastí",
|
||||
"description": "Správa oblastí ve vaší domácnosti",
|
||||
"editor": {
|
||||
"area_id": "ID oblasti",
|
||||
"create": "VYTVOŘIT",
|
||||
@@ -1070,14 +1050,11 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automatizace",
|
||||
"description": "Vytvořte si pro svůj domov vlastní pravidla chování",
|
||||
"description": "Správa automatizací",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Použít šablonu"
|
||||
},
|
||||
"header": "Vytvoření automatizace",
|
||||
"how": "Jak chcete vytvořit svou novou automatizaci?",
|
||||
"start_empty": "Začít s prázdnou automatizací",
|
||||
"start_empty": "Začněte s prázdnou automatizací",
|
||||
"thingtalk": {
|
||||
"create": "Vytvořit",
|
||||
"header": "Popište automatizaci, kterou chcete vytvořit",
|
||||
@@ -1110,8 +1087,8 @@
|
||||
"label": "Stav"
|
||||
},
|
||||
"delay": {
|
||||
"delay": "Pozdržení",
|
||||
"label": "Pozdržení"
|
||||
"delay": "Zpoždění",
|
||||
"label": "Zpoždění"
|
||||
},
|
||||
"device_id": {
|
||||
"action": "Akce",
|
||||
@@ -1166,12 +1143,7 @@
|
||||
},
|
||||
"alias": "Název",
|
||||
"blueprint": {
|
||||
"blueprint_to_use": "Šablona k použití",
|
||||
"header": "Šablona",
|
||||
"inputs": "Vstupy",
|
||||
"manage_blueprints": "Správa šablon",
|
||||
"no_blueprints": "Nemáme žádné šablony",
|
||||
"no_inputs": "Šablona nemá žádné vstupy."
|
||||
"inputs": "Vstupy"
|
||||
},
|
||||
"conditions": {
|
||||
"add": "Přidat podmínku",
|
||||
@@ -1417,38 +1389,24 @@
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "komunitních fór",
|
||||
"error_no_url": "Zadejte adresu URL adresu šablony",
|
||||
"file_name": "Cesta k šabloně",
|
||||
"header": "Import šablony",
|
||||
"import_btn": "Náhled šablony",
|
||||
"import_header": "Šablona \"{name}\"",
|
||||
"import_introduction": "Můžete importovat šablony od ostatních uživatelů z GitHubu a komunitních fór. Níže zadejte URL adresu šablony.",
|
||||
"import_introduction_link": "Můžete importovat šablony od ostatních uživatelů z GitHubu a {community_link}. Níže zadejte URL adresu šablony.",
|
||||
"importing": "Načítám šablonu...",
|
||||
"raw_blueprint": "Obsah šablony",
|
||||
"save_btn": "Importovat šablonu",
|
||||
"saving": "Importuji šablonu...",
|
||||
"unsupported_blueprint": "Tato šablona není podporována.",
|
||||
"url": "URL adresa šablony"
|
||||
"error_no_url": "Zadejte adresu URL šablonky konfigurace",
|
||||
"header": "Přidat novou šablonku konfigurace",
|
||||
"import_btn": "Importovat šablonku konfigurace",
|
||||
"import_header": "Importovat \"{name}\" (typ: {domain})",
|
||||
"import_introduction": "Z Githubu a komunitních fór můžete importovat šablonky konfigurace sdílené ostatními uživateli. Zadejte adresu URL šablonky konfigurace.",
|
||||
"importing": "Importuje se šablonka konfigurace",
|
||||
"save_btn": "Uložit šablonku konfigurace",
|
||||
"saving": "Ukládání konfigurační šablonky",
|
||||
"url": "URL šablonky konfigurace"
|
||||
},
|
||||
"caption": "Šablony",
|
||||
"description": "Správa šablon",
|
||||
"overview": {
|
||||
"add_blueprint": "Import šablony",
|
||||
"confirm_delete_header": "Odstranit tuto šablonu?",
|
||||
"confirm_delete_text": "Opravdu chcete smazat tuto šablonu?",
|
||||
"delete_blueprint": "Smazat šablonu",
|
||||
"discover_more": "Objevte další šablony",
|
||||
"header": "Editor šablon",
|
||||
"confirm_delete_header": "Odstranit tuto šablonku konfigurace?",
|
||||
"headers": {
|
||||
"domain": "Doména",
|
||||
"file_name": "Název souboru",
|
||||
"name": "Jméno"
|
||||
},
|
||||
"introduction": "Nastavení šablon vám umožňuje importovat a spravovat vaše šablony.",
|
||||
"learn_more": "Další informace o používání šablon",
|
||||
"use_blueprint": "Vytvořit automatizaci"
|
||||
"learn_more": "Další informace o šablonkách konfigurace"
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
@@ -1461,7 +1419,7 @@
|
||||
"enable_state_reporting": "Povolit hlášení stavu",
|
||||
"info": "Díky integraci Alexa pro Home Assistant Cloud budete moci ovládat všechna zařízení v Home Assistant pomocí jakéhokoli zařízení podporujícího Alexa.",
|
||||
"info_state_reporting": "Pokud povolíte hlášení stavu, Home Assistant bude posílat veškeré změny stavů všech exponovaných entit do Amazonu. Toto vám umožní sledovat aktuální stavy entity v aplikaci Alexa a použít tyto stavy k vytvoření rutin.",
|
||||
"manage_entities": "Správa entit",
|
||||
"manage_entities": "Spravovat entity",
|
||||
"state_reporting_error": "Nelze {enable_disable} hlášení stavu.",
|
||||
"sync_entities": "Synchronizovat entity",
|
||||
"sync_entities_error": "Chyba při synchronizaci entit:",
|
||||
@@ -1490,7 +1448,7 @@
|
||||
"integrations_introduction": "Integrace pro Home Assistant Cloud vám umožní připojit se ke cloudovým službám, aniž byste museli veřejně zpřístupnit vaší instanci Home Assistant na internetu.",
|
||||
"integrations_introduction2": "Na webových stránkách najdete ",
|
||||
"integrations_link_all_features": " všechny dostupné funkce",
|
||||
"manage_account": "Správa účtu",
|
||||
"manage_account": "Spravovat účet",
|
||||
"nabu_casa_account": "Účet Nabu Casa",
|
||||
"not_connected": "Není připojeno",
|
||||
"remote": {
|
||||
@@ -1531,7 +1489,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Ovládejte, i když nejste doma, a propojte s Alexou a Google Assistantem",
|
||||
"description_features": "Ovládejte vzdáleně, integrace s Alexou a Google Assistant.",
|
||||
"description_login": "Přihlášen jako {email}",
|
||||
"description_not_login": "Nepřihlášen",
|
||||
"dialog_certificate": {
|
||||
@@ -1626,7 +1584,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "Obecné",
|
||||
"description": "Jednotkový systém, umístění, časové pásmo a další obecné parametry",
|
||||
"description": "Změny obecného nastavení Home Assistant",
|
||||
"section": {
|
||||
"core": {
|
||||
"core_config": {
|
||||
@@ -1688,7 +1646,6 @@
|
||||
"unknown_condition": "Neznámá podmínka"
|
||||
},
|
||||
"create": "Vytvořit automatizaci se zařízením",
|
||||
"create_disable": "Nelze vytvořit automatizaci se zakázaným zařízením",
|
||||
"no_automations": "Žádné automatizace",
|
||||
"no_device_automations": "Pro toto zařízení nejsou k dispozici žádné automatizace.",
|
||||
"triggers": {
|
||||
@@ -1702,7 +1659,7 @@
|
||||
"caption": "Zařízení",
|
||||
"confirm_delete": "Opravdu chcete toto zařízení odstranit?",
|
||||
"confirm_rename_entity_ids": "Chcete také přejmenovat ID entit?",
|
||||
"confirm_rename_entity_ids_warning": "Žádná nastavení (např. automatizace, skripty, scény, ovládací panely), která tyto entity aktuálně používá, nebudou změněna! Vše budete muset aktualizovat sami, aby se používaly nová ID entit!",
|
||||
"confirm_rename_entity_ids_warning": "Žádná nastavení (např. automatizace, skripty, scény, dashboardy), která tyto entity aktuálně používá, nebudou změněna! Vše budete muset aktualizovat sami, aby se používaly nová ID entit!",
|
||||
"data_table": {
|
||||
"area": "Oblast",
|
||||
"battery": "Baterie",
|
||||
@@ -1717,15 +1674,6 @@
|
||||
"description": "Správa připojených zařízení",
|
||||
"device_info": "Informace o zařízení",
|
||||
"device_not_found": "Zařízení nebylo nalezeno.",
|
||||
"disabled": "Zakázáno",
|
||||
"disabled_by": {
|
||||
"config_entry": "Položka nastavení",
|
||||
"integration": "Integrace",
|
||||
"user": "Uživatel"
|
||||
},
|
||||
"enabled_cause": "Zařízení je zakázáno přes {cause}.",
|
||||
"enabled_description": "Zakázaná zařízení se nebudou zobrazovat a entity patřící k těmto zařízením budou zakázány a nebudou přidány do Home Assistant.",
|
||||
"enabled_label": "Povolit zařízení",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Přidat do Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {zakázaná entita}\n other {zakázaných entit}\n}",
|
||||
@@ -1735,25 +1683,14 @@
|
||||
},
|
||||
"name": "Jméno",
|
||||
"no_devices": "Žádná zařízení",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtrovat",
|
||||
"hidden_devices": "{number} {number, plural,\n one {skryté zařízení}\n few {skrytá zařízení}\n other {skrytých zařízení}\n}",
|
||||
"show_all": "Zobrazit vše",
|
||||
"show_disabled": "Zobrazit zakázaná zařízení"
|
||||
},
|
||||
"search": "Hledat zařízení"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Vytvořit scénu se zařízením",
|
||||
"create_disable": "Nelze vytvořit scénu se zakázaným zařízením",
|
||||
"no_scenes": "Žádné scény",
|
||||
"scenes": "Scény"
|
||||
},
|
||||
"scenes": "Scény",
|
||||
"script": {
|
||||
"create": "Vytvořit skript se zařízením",
|
||||
"create_disable": "Nelze vytvořit skript se zakázaným zařízením",
|
||||
"no_scripts": "Žádné skripty",
|
||||
"scripts": "Skripty"
|
||||
},
|
||||
@@ -1786,7 +1723,6 @@
|
||||
},
|
||||
"header": "Entity",
|
||||
"headers": {
|
||||
"area": "Oblast",
|
||||
"entity_id": "ID entity",
|
||||
"integration": "Integrace",
|
||||
"name": "Název",
|
||||
@@ -1819,7 +1755,7 @@
|
||||
"header": "Nastavení Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Pomocníci",
|
||||
"description": "Prvky, které pomáhají vytvářet automatizace",
|
||||
"description": "Správa prvků, které mohou pomoci při vytváření automatizací",
|
||||
"dialog": {
|
||||
"add_helper": "Přidat pomocníka",
|
||||
"add_platform": "Přidat {platform}",
|
||||
@@ -1837,7 +1773,7 @@
|
||||
},
|
||||
"types": {
|
||||
"counter": "Počítadlo",
|
||||
"input_boolean": "Přepínač",
|
||||
"input_boolean": "Přepnout",
|
||||
"input_datetime": "Datum a/nebo čas",
|
||||
"input_number": "Číslo",
|
||||
"input_select": "Výběr",
|
||||
@@ -1851,7 +1787,7 @@
|
||||
"copy_github": "Pro GitHub",
|
||||
"copy_raw": "Nezpracovaný text",
|
||||
"custom_uis": "Vlastní uživatelská rozhraní:",
|
||||
"description": "Verze, stav systému a odkazy na dokumentaci",
|
||||
"description": "Informace o instalaci Home Assistant",
|
||||
"developed_by": "Vyvinuto partou úžasných lidí.",
|
||||
"documentation": "Dokumentace",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1893,7 +1829,7 @@
|
||||
"virtualenv": "Virtuální prostředí"
|
||||
},
|
||||
"lovelace": {
|
||||
"dashboards": "Ovládací panely",
|
||||
"dashboards": "Dashboardy",
|
||||
"mode": "Režim",
|
||||
"resources": "Zdroje"
|
||||
}
|
||||
@@ -1957,7 +1893,7 @@
|
||||
},
|
||||
"configure": "Nastavit",
|
||||
"configured": "Nastaveno",
|
||||
"description": "Správa integrací a jejich služeb, zařízení, ...",
|
||||
"description": "Správa integrací",
|
||||
"details": "Podrobnosti o integraci",
|
||||
"discovered": "Objeveno",
|
||||
"home_assistant_website": "stránky Home Assistant",
|
||||
@@ -2001,24 +1937,24 @@
|
||||
"title": "Logy"
|
||||
},
|
||||
"lovelace": {
|
||||
"caption": "Ovládací panely Lovelace",
|
||||
"caption": "Lovelace Dashboardy",
|
||||
"dashboards": {
|
||||
"cant_edit_default": "Standardní ovládací panel Lovelace nelze upravovat z uživatelského rozhraní. Můžete jej skrýt nastavením jiného ovládacího panelu jako výchozího.",
|
||||
"cant_edit_yaml": "Ovládací panely definované v YAML nelze upravovat z uživatelského rozhraní. Změňte je v configuration.yaml.",
|
||||
"caption": "Ovládací panely",
|
||||
"cant_edit_default": "Standardní Lovelace dashboard nelze upravovat z uživatelského rozhraní. Můžete jej skrýt nastavením jiného dashboardu jako výchozího.",
|
||||
"cant_edit_yaml": "Dashboardy definované v YAML nelze upravovat z uživatelského rozhraní. Změňte je v configuration.yaml.",
|
||||
"caption": "Dashboardy",
|
||||
"conf_mode": {
|
||||
"storage": "Řízeno uživatelským rozhraním",
|
||||
"yaml": "Soubor YAML"
|
||||
},
|
||||
"confirm_delete": "Opravdu chcete odstranit tento ovládací panel?",
|
||||
"default_dashboard": "Toto je výchozí ovládací panel",
|
||||
"confirm_delete": "Opravdu chcete odstranit tento dashboard?",
|
||||
"default_dashboard": "Toto je výchozí dashboard",
|
||||
"detail": {
|
||||
"create": "Vytvořit",
|
||||
"delete": "Smazat",
|
||||
"dismiss": "Zavřít",
|
||||
"edit_dashboard": "Upravit ovládací panel",
|
||||
"edit_dashboard": "Upravit dashboard",
|
||||
"icon": "Ikona",
|
||||
"new_dashboard": "Přidat nový ovládací panel",
|
||||
"new_dashboard": "Přidat nový dashboard",
|
||||
"remove_default": "Odebrat jako výchozí na tomto zařízení",
|
||||
"require_admin": "Pouze správce",
|
||||
"set_default": "Nastavit jako výchozí na tomto zařízení",
|
||||
@@ -2030,7 +1966,7 @@
|
||||
"url_error_msg": "Adresa URL by měla obsahovat - a nesmí obsahovat mezery ani speciální znaky, s výjimkou _ a -"
|
||||
},
|
||||
"picker": {
|
||||
"add_dashboard": "Přidat ovládací panel",
|
||||
"add_dashboard": "Přidat dashboard",
|
||||
"headers": {
|
||||
"conf_mode": "Metoda nastavení",
|
||||
"default": "Výchozí",
|
||||
@@ -2042,7 +1978,7 @@
|
||||
"open": "Otevřít"
|
||||
}
|
||||
},
|
||||
"description": "Vytvořte vlastní sady karet pro ovládání svého domova",
|
||||
"description": "Správa Lovelace Dashboardů",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Používáte Lovelace v režimu YAML, proto nemůžete spravovat své zdroje prostřednictvím uživatelského rozhraní. Spravujte je v souboru configuration.yaml.",
|
||||
"caption": "Zdroje",
|
||||
@@ -2083,7 +2019,7 @@
|
||||
"description_publish": "Publikovat paket",
|
||||
"listening_to": "Naslouchám",
|
||||
"message_received": "Zpráva {id} přijata na {topic} v {time} :",
|
||||
"payload": "Obsah (povolena šablona)",
|
||||
"payload": "Obsah",
|
||||
"publish": "Publikovat",
|
||||
"start_listening": "Začít naslouchat",
|
||||
"stop_listening": "Přestat naslouchat",
|
||||
@@ -2112,7 +2048,7 @@
|
||||
"network": "Síť",
|
||||
"node": {
|
||||
"config": "Nastavení",
|
||||
"dashboard": "Ovládací panel"
|
||||
"dashboard": "Dashboard"
|
||||
},
|
||||
"nodes": "Uzly",
|
||||
"select_instance": "Vyberte instanci"
|
||||
@@ -2145,7 +2081,7 @@
|
||||
"node_config": {
|
||||
"header": "Nastavení uzlu",
|
||||
"help_source": "Popisy parametrů nastavení a text nápovědy poskytuje projekt OpenZWave.",
|
||||
"introduction": "Správa různých parametrů nastavení uzlu Z-Wave.",
|
||||
"introduction": "Spravujte různé parametry nastavení uzlu Z-Wave.",
|
||||
"wakeup_help": "Uzly napájené z baterie musí být vzhůru, aby mohly změnit své nastavení. Pokud uzel není vzhůru, OpenZWave se pokusí aktualizovat nastavení uzlu při příštím probuzení, což může být o několik hodin (nebo dní) později. Zařízení probudíte takto:"
|
||||
},
|
||||
"node_metadata": {
|
||||
@@ -2241,7 +2177,7 @@
|
||||
"scene": {
|
||||
"activated": "Aktivovaná scéna {name}.",
|
||||
"caption": "Scény",
|
||||
"description": "Zachyťte stavy zařízení a snadno je později vyvolejte",
|
||||
"description": "Správa scén",
|
||||
"editor": {
|
||||
"default_name": "Nová scéna",
|
||||
"devices": {
|
||||
@@ -2285,7 +2221,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Skripty",
|
||||
"description": "Provádějte posloupnosti akcí",
|
||||
"description": "Správa skriptů",
|
||||
"editor": {
|
||||
"alias": "Název",
|
||||
"default_name": "Nový skript",
|
||||
@@ -2346,7 +2282,7 @@
|
||||
"generic": "Nově načíst entity integrace Generic IP camera",
|
||||
"generic_thermostat": "Nově načíst entity integrace Generic thermostat",
|
||||
"group": "Nově načíst skupiny, skupiny entit a notifikační služby",
|
||||
"heading": "Nové načtení YAML konfigurace",
|
||||
"heading": "Nastavení z YAML se načítá",
|
||||
"history_stats": "Nově načíst entity integrace History stats",
|
||||
"homekit": "Nově načíst entity integrace HomeKit",
|
||||
"input_boolean": "Nově načíst pomocníky - přepínače",
|
||||
@@ -2396,7 +2332,7 @@
|
||||
"confirm_remove": "Opravdu chcete odebrat štítek {tag}?",
|
||||
"confirm_remove_title": "Odebrat štítek?",
|
||||
"create_automation": "Vytvořit automatizaci se štítkem",
|
||||
"description": "Spusťte automatizaci skenováním NFC tagu, QR kódu atd.",
|
||||
"description": "Správa štítků",
|
||||
"detail": {
|
||||
"companion_apps": "doprovodné aplikace",
|
||||
"create": "Vytvořit",
|
||||
@@ -2431,11 +2367,10 @@
|
||||
"username": "Uživatelské jméno"
|
||||
},
|
||||
"caption": "Uživatelé",
|
||||
"description": "Správa uživatelských účtů pro Home Assistant",
|
||||
"description": "Správa uživatelů",
|
||||
"editor": {
|
||||
"activate_user": "Aktivovat uživatele",
|
||||
"active": "Aktivní",
|
||||
"active_tooltip": "Určuje, zda se uživatel může přihlásit",
|
||||
"admin": "Administrátor",
|
||||
"caption": "Zobrazit uživatele",
|
||||
"change_password": "Změnit heslo",
|
||||
@@ -2515,16 +2450,6 @@
|
||||
"value": "Hodnota"
|
||||
},
|
||||
"description": "Správa Zigbee Home Automation",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Nastavení dokončeno",
|
||||
"CONFIGURED_status_text": "Inicializuji",
|
||||
"INITIALIZED": "Inicializace dokončena",
|
||||
"INITIALIZED_status_text": "Zařízení je připraveno k použití",
|
||||
"INTERVIEW_COMPLETE": "Dotazování dokončeno",
|
||||
"INTERVIEW_COMPLETE_status_text": "Nastavuji",
|
||||
"PAIRED": "Zařízení nalezeno",
|
||||
"PAIRED_status_text": "Začínám dotazování"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Zigbee Home Automation - Zařízení"
|
||||
},
|
||||
@@ -2628,7 +2553,7 @@
|
||||
"value": "Hodnota",
|
||||
"wakeup_interval": "Interval probuzení"
|
||||
},
|
||||
"description": "Správa síťě Z-Wave",
|
||||
"description": "Spravujte svou síť Z-Wave",
|
||||
"learn_more": "Další informace o Z-Wave",
|
||||
"network_management": {
|
||||
"header": "Správa sítě Z-Wave",
|
||||
@@ -2767,11 +2692,11 @@
|
||||
},
|
||||
"templates": {
|
||||
"all_listeners": "Tato šablona naslouchá všem změnám stavu.",
|
||||
"description": "Šablony jsou vykreslovány pomocí šablonovacího systému Jinja2 s některými specifickými rozšířeními pro Home Assistant.",
|
||||
"description": "Šablony jsou vykreslovány pomocí Jinja2 šablonového enginu s některými specifickými rozšířeními pro Home Assistant.",
|
||||
"domain": "Doména",
|
||||
"editor": "Editor šablon",
|
||||
"entity": "Entita",
|
||||
"jinja_documentation": "Dokumentace šablon Jinja2",
|
||||
"jinja_documentation": "Dokumentace šablony Jinja2",
|
||||
"listeners": "Tato šablona naslouchá následujícím změnám stavu:",
|
||||
"no_listeners": "Tato šablona nenaslouchá žádným událostem a nebude automaticky aktualizována.",
|
||||
"reset": "Obnovit ukázkovou šablonu",
|
||||
@@ -2779,7 +2704,7 @@
|
||||
"template_extensions": "Rozšíření šablony Home Assistant",
|
||||
"time": "Tato šablona se aktualizuje na začátku každé minuty.",
|
||||
"title": "Šablony",
|
||||
"unknown_error_template": "Neznámá chyba při vykreslení šablony"
|
||||
"unknown_error_template": "Šablona vykreslování neznámých chyb"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2844,7 +2769,7 @@
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "Nastavení Lovelace pro tento ovládací panel bylo aktualizováno. Chcete obnovit stránku?",
|
||||
"message": "Nastavení Lovelace pro tento dashboard bylo aktualizováno. Chcete obnovit stránku?",
|
||||
"refresh": "Obnovit"
|
||||
},
|
||||
"editor": {
|
||||
@@ -3185,17 +3110,17 @@
|
||||
"save_config": {
|
||||
"cancel": "Zahodit změnu",
|
||||
"close": "Zavřít",
|
||||
"empty_config": "Začít s prázdným ovládacím panel",
|
||||
"empty_config": "Začít s prázdným dashboardem",
|
||||
"header": "Převzít kontrolu nad vaší Lovelace UI",
|
||||
"para": "Tento ovládací panel momentálně spravuje Home Assistant. Je automaticky aktualizován při přidání nové entity nebo Lovelace komponenty. Pokud převezmete kontrolu, nebudeme již provádět změny automaticky za vás. Vždy si můžete vytvořit nový ovládací panel na hraní.",
|
||||
"para": "Tento dashboard momentálně spravuje Home Assistant. Je automaticky aktualizován při přidání nové entity nebo Lovelace komponenty. Pokud převezmete kontrolu, nebudeme již provádět změny automaticky za vás. Vždy si můžete vytvořit nový dashboard na hraní.",
|
||||
"para_sure": "Opravdu chcete převzít kontrolu nad uživalským rozhraním ?",
|
||||
"save": "Převzít kontrolu",
|
||||
"yaml_config": "Abyste mohli snadněji začít, zde je aktuální nastavení tohoto ovládacího panelu:",
|
||||
"yaml_control": "Chcete-li převzít kontrolu v režimu YAML, vytvořte soubor YAML s názvem, který jste uvedli ve svém nastavení pro tento ovládací panel, nebo výchozí \"ui-lovelace.yaml\".",
|
||||
"yaml_config": "Abyste mohli snadněji začít, zde je aktuální nastavení tohoto dashboardu:",
|
||||
"yaml_control": "Chcete-li převzít kontrolu v režimu YAML, vytvořte soubor YAML s názvem, který jste uvedli ve svém nastavení pro tento dashboard, nebo výchozí \"ui-lovelace.yaml\".",
|
||||
"yaml_mode": "Používáte režim YAML, což znamená, že nemůžete změnit nastavení Lovelace z uživatelského rozhraní. Pokud chcete měnit Lovelace z uživatelského rozhraní, odstraňte \"mode: yaml\" z vašeho nastavení Lovelace v \"configuration.yaml\"."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Ovládací panel",
|
||||
"dashboard_label": "Dashboard",
|
||||
"header": "Vyberte pohled"
|
||||
},
|
||||
"sub-element-editor": {
|
||||
@@ -3220,7 +3145,7 @@
|
||||
},
|
||||
"menu": {
|
||||
"close": "Zavřít",
|
||||
"configure_ui": "Upravit ovládací panel",
|
||||
"configure_ui": "Upravit Dashboard",
|
||||
"exit_edit_mode": "Ukončit režim úprav uživatelského rozhraní",
|
||||
"help": "Nápověda",
|
||||
"refresh": "Obnovit",
|
||||
@@ -3454,13 +3379,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Potvrďte nové heslo",
|
||||
"current_password": "Současné heslo",
|
||||
"error_new_is_old": "Nové heslo se musí lišit od aktuálního hesla",
|
||||
"error_new_mismatch": "Zadaná nová hesla se neshodují",
|
||||
"error_required": "Povinný",
|
||||
"header": "Změnit heslo",
|
||||
"new_password": "Nové heslo",
|
||||
"submit": "Odeslat",
|
||||
"success": "Heslo bylo úspěšně změněno"
|
||||
"submit": "Odeslat"
|
||||
},
|
||||
"current_user": "Nyní jste přihlášeni jako {fullName}.",
|
||||
"customize_sidebar": {
|
||||
@@ -3469,9 +3391,9 @@
|
||||
"header": "Změna pořadí a skrytí položek postranního panelu"
|
||||
},
|
||||
"dashboard": {
|
||||
"description": "Vyberte výchozí ovládací panel pro toto zařízení.",
|
||||
"dropdown_label": "Ovládací panel",
|
||||
"header": "Ovládací panel"
|
||||
"description": "Vyberte výchozí dashboard pro toto zařízení.",
|
||||
"dropdown_label": "Dashboard",
|
||||
"header": "Dashboard"
|
||||
},
|
||||
"enable_shortcuts": {
|
||||
"description": "Povolte nebo zakažte klávesové zkratky pro provádění různých akcí v uživatelském rozhraní.",
|
||||
|
@@ -2,13 +2,11 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Konfigurationstilstand",
|
||||
"device": "Enhed",
|
||||
"integration": "Integration",
|
||||
"user": "Bruger"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"owner": "Ejer",
|
||||
"system-admin": "Administratorer",
|
||||
"system-read-only": "Skrivebeskyttede brugere",
|
||||
"system-users": "Brugere"
|
||||
@@ -503,8 +501,6 @@
|
||||
"continue": "Fortsæt",
|
||||
"copied": "Kopieret",
|
||||
"delete": "Slet",
|
||||
"disable": "Deaktiver",
|
||||
"enable": "Aktiver",
|
||||
"error_required": "Påkrævet",
|
||||
"loading": "Indlæser",
|
||||
"menu": "Menu",
|
||||
@@ -513,8 +509,6 @@
|
||||
"overflow_menu": "Overløbsmenu",
|
||||
"previous": "Forrige",
|
||||
"refresh": "Opdater",
|
||||
"remove": "Fjern",
|
||||
"rename": "Omdøb",
|
||||
"save": "Gem",
|
||||
"successfully_deleted": "Slettet",
|
||||
"successfully_saved": "Gemt",
|
||||
@@ -535,10 +529,6 @@
|
||||
"clear": "Ryd",
|
||||
"show_areas": "Vis områder"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Tilføj bruger",
|
||||
"remove_user": "Fjern bruger"
|
||||
},
|
||||
"data-table": {
|
||||
"no-data": "Ingen data",
|
||||
"search": "Søg"
|
||||
@@ -552,7 +542,6 @@
|
||||
"clear": "Ryd",
|
||||
"device": "Enhed",
|
||||
"no_area": "Intet område",
|
||||
"no_devices": "Du har ingen enheder",
|
||||
"show_devices": "Vis enheder",
|
||||
"toggle": "Til/fra"
|
||||
},
|
||||
@@ -629,10 +618,6 @@
|
||||
"service-picker": {
|
||||
"service": "Tjeneste"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_device_id": "Vælg enhed",
|
||||
"remove_device_id": "Fjern enhed"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Tilføj bruger",
|
||||
"no_user": "Ingen bruger",
|
||||
@@ -774,15 +759,6 @@
|
||||
"description": "Indstillingerne blev gemt."
|
||||
}
|
||||
},
|
||||
"quick-bar": {
|
||||
"commands": {
|
||||
"server_control": {
|
||||
"perform_action": "{action} server",
|
||||
"restart": "Genstart",
|
||||
"stop": "Stop"
|
||||
}
|
||||
}
|
||||
},
|
||||
"voice_command": {
|
||||
"did_not_hear": "Home Assistant hørte ikke noget",
|
||||
"error": "Ups, der er opstået en fejl",
|
||||
@@ -891,14 +867,6 @@
|
||||
"automation": {
|
||||
"caption": "Automatiseringer",
|
||||
"description": "Administrer automatiseringer",
|
||||
"dialog_new": {
|
||||
"thingtalk": {
|
||||
"create": "Opret",
|
||||
"header": "Beskriv automationen du vil lave",
|
||||
"input_label": "Hvad skal denne automation gøre?",
|
||||
"intro": "Og vi vil forsøge at skabe den for dig. For eksempel: Sluk lyset, når jeg forlader hjemmet."
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"actions": {
|
||||
"add": "Tilføj handling",
|
||||
@@ -1038,7 +1006,6 @@
|
||||
},
|
||||
"unsupported_condition": "Ikke-understøttet betingelse: {condition}"
|
||||
},
|
||||
"copy_to_clipboard": "Kopier til udklipsholder",
|
||||
"default_name": "Ny automatisering",
|
||||
"description": {
|
||||
"label": "Beskrivelse",
|
||||
@@ -1179,25 +1146,6 @@
|
||||
"only_editable": "Kun automatiseringer, der er defineret i 'automations.yaml', er redigerbare.",
|
||||
"pick_automation": "Vælg automatisering for at redigere",
|
||||
"show_info_automation": "Vis info om automatisering"
|
||||
},
|
||||
"thingtalk": {
|
||||
"create": "Opret automation",
|
||||
"task_selection": {
|
||||
"header": "Opret en ny automation",
|
||||
"introduction": "Skriv nedenfor, hvad denne automation skal gøre, og vi vil forsøge at konvertere den til en Home Assistant automation."
|
||||
}
|
||||
}
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"import_introduction": "Du kan importere skabeloner af andre brugere fra Github og {community_link} . Indtast URL'en til skabelonen nedenfor.",
|
||||
"import_introduction_link": "Du kan importere tegninger af andre brugere fra Github og {community_link} . Indtast webadressen til tegningen nedenfor."
|
||||
},
|
||||
"overview": {
|
||||
"headers": {
|
||||
"domain": "Domæne",
|
||||
"file_name": "Filnavn"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
@@ -1412,16 +1360,13 @@
|
||||
"devices": {
|
||||
"automation": {
|
||||
"actions": {
|
||||
"caption": "Når noget udløses...",
|
||||
"no_actions": "Ingen handlinger",
|
||||
"unknown_action": "Ukendt handling"
|
||||
"caption": "Når noget udløses..."
|
||||
},
|
||||
"automations": "Automatiseringer",
|
||||
"conditions": {
|
||||
"caption": "Gør kun noget, hvis..."
|
||||
},
|
||||
"create": "Opret automatisering med enhed",
|
||||
"create_disable": "Kan ikke oprette automation med deaktiveret enhed",
|
||||
"no_automations": "Ingen automatiseringer",
|
||||
"no_device_automations": "Der er ingen automatiseringer til rådighed for denne enhed.",
|
||||
"triggers": {
|
||||
@@ -1446,12 +1391,6 @@
|
||||
"description": "Administrer tilsluttede enheder",
|
||||
"device_info": "Enhedsoplysninger",
|
||||
"device_not_found": "Enhed blev ikke fundet.",
|
||||
"disabled": "Deaktiveret",
|
||||
"disabled_by": {
|
||||
"integration": "Integration",
|
||||
"user": "Bruger"
|
||||
},
|
||||
"enabled_label": "Aktiver enhed",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Tilføj til Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {deaktiveret entitet}\n other {deaktiverede entiteter}\n}",
|
||||
@@ -1461,24 +1400,14 @@
|
||||
},
|
||||
"name": "Navn",
|
||||
"no_devices": "Ingen enheder",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtrer",
|
||||
"show_all": "Vis alle",
|
||||
"show_disabled": "Vis deaktiverede enheder"
|
||||
},
|
||||
"search": "Søg efter enheder"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Opret scene med enhed",
|
||||
"create_disable": "Kan ikke oprette scene med deaktiveret enhed",
|
||||
"no_scenes": "Ingen scener",
|
||||
"scenes": "Scener"
|
||||
},
|
||||
"scenes": "Scener",
|
||||
"script": {
|
||||
"create": "Opret script med enhed",
|
||||
"create_disable": "Kan ikke oprette script med deaktiveret enhed",
|
||||
"no_scripts": "Ingen scripts",
|
||||
"scripts": "Scripts"
|
||||
},
|
||||
@@ -1503,14 +1432,12 @@
|
||||
},
|
||||
"filter": {
|
||||
"filter": "Filtrer",
|
||||
"show_all": "Vis alle",
|
||||
"show_disabled": "Vis deaktiverede entiteter",
|
||||
"show_readonly": "Vis skrivebeskyttede entiteter",
|
||||
"show_unavailable": "Vis utilgængelige entiteter"
|
||||
},
|
||||
"header": "Entiteter",
|
||||
"headers": {
|
||||
"area": "Område",
|
||||
"entity_id": "Entitets-id",
|
||||
"integration": "Integration",
|
||||
"name": "Navn",
|
||||
@@ -1570,7 +1497,6 @@
|
||||
"info": {
|
||||
"built_using": "Bygget ved hjælp af",
|
||||
"caption": "Oplysninger",
|
||||
"copy_raw": "Rå tekst",
|
||||
"custom_uis": "Tilpassede brugergrænseflader:",
|
||||
"description": "Se oplysninger om din Home Assistant-installation",
|
||||
"developed_by": "Udviklet af en masse fantastiske mennesker.",
|
||||
@@ -1586,21 +1512,6 @@
|
||||
"server": "server",
|
||||
"source": "Kilde:",
|
||||
"system_health_error": "System Health-komponenten er ikke indlæst. Føj 'system_health:' til 'config.yaml'",
|
||||
"system_health": {
|
||||
"checks": {
|
||||
"homeassistant": {
|
||||
"dev": "Udvikling",
|
||||
"docker": "Docker",
|
||||
"hassio": "HassOS",
|
||||
"installation_type": "Installationstype",
|
||||
"os_version": "Styresystem version",
|
||||
"python_version": "Python version",
|
||||
"timezone": "Tidszone",
|
||||
"version": "Version"
|
||||
}
|
||||
},
|
||||
"manage": "Administrer"
|
||||
},
|
||||
"title": "Info"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
@@ -2003,23 +1914,18 @@
|
||||
"system_generated_users_not_editable": "Systemoprettede brugere kan ikke opdateres.",
|
||||
"system_generated_users_not_removable": "Kan ikke fjerne systemgenererede brugere.",
|
||||
"unnamed_user": "Unavngiven bruger",
|
||||
"update_user": "Opdater",
|
||||
"username": "Brugernavn"
|
||||
"update_user": "Opdater"
|
||||
},
|
||||
"picker": {
|
||||
"headers": {
|
||||
"group": "Gruppe",
|
||||
"is_active": "Aktiv",
|
||||
"is_owner": "Ejer",
|
||||
"name": "Navn",
|
||||
"system": "System",
|
||||
"username": "Brugernavn"
|
||||
"system": "System"
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "Bruger-gruppen stadig under udvikling. Brugeren vil ikke være i stand til at administrere instansen via brugerfladen. Vi kigger stadig alle administrations-API-slutpunkter igennem for at sikre, at de korrekt begrænser adgangen til administratorer."
|
||||
},
|
||||
"zha": {
|
||||
"add_device": "Tilføj enhed",
|
||||
"add_device_page": {
|
||||
"discovered_text": "Enheder vil dukke op her, når de er fundet.",
|
||||
"discovery_text": "Fundne enheder vil dukke op her. Følg instruktionerne for din enhed(er) og sæt enhed(erne) i parringstilstand.",
|
||||
@@ -2065,9 +1971,6 @@
|
||||
"value": "Værdi"
|
||||
},
|
||||
"description": "Zigbee Home Automation-opsætning",
|
||||
"device_pairing_card": {
|
||||
"INITIALIZED_status_text": "Enheden er klar til brug"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Zigbee Home Automation - Enhed"
|
||||
},
|
||||
@@ -2083,7 +1986,6 @@
|
||||
"unbind_button_label": "Fjern sammenføjning af gruppe"
|
||||
},
|
||||
"groups": {
|
||||
"add_group": "Tilføj gruppe",
|
||||
"add_members": "Tilføj medlemmer",
|
||||
"adding_members": "Tilføjer medlemmer",
|
||||
"caption": "Grupper",
|
||||
|
@@ -2,13 +2,11 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Konfigurationseintrag",
|
||||
"device": "Gerät",
|
||||
"integration": "Integration",
|
||||
"user": "Benutzer"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"owner": "Besitzer",
|
||||
"system-admin": "Administratoren",
|
||||
"system-read-only": "Nur-Lesen Benutzer",
|
||||
"system-users": "Benutzer"
|
||||
@@ -532,7 +530,7 @@
|
||||
"stay": "Bleiben",
|
||||
"successfully_deleted": "Erfolgreich gelöscht",
|
||||
"successfully_saved": "Erfolgreich gespeichert",
|
||||
"undo": "Rückgängig",
|
||||
"undo": "Rückgängig machen",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"components": {
|
||||
@@ -547,14 +545,12 @@
|
||||
"add_new": "Neuen Bereich hinzufügen...",
|
||||
"area": "Bereich",
|
||||
"clear": "Löschen",
|
||||
"no_areas": "Du hast keine Bereiche",
|
||||
"no_match": "Keine übereinstimmende Bereiche gefunden",
|
||||
"show_areas": "Bereiche anzeigen"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Benutzer hinzufügen",
|
||||
"remove_user": "Benutzer entfernen",
|
||||
"select_blueprint": "Wähle eine Vorlage aus"
|
||||
"select_blueprint": "Wähle einen Bauplan aus"
|
||||
},
|
||||
"data-table": {
|
||||
"no-data": "Keine Daten",
|
||||
@@ -569,8 +565,6 @@
|
||||
"clear": "Löschen",
|
||||
"device": "Gerät",
|
||||
"no_area": "Kein Bereich",
|
||||
"no_devices": "Du hast keine Geräte",
|
||||
"no_match": "Keine übereinstimmende Geräte gefunden",
|
||||
"show_devices": "Geräte anzeigen",
|
||||
"toggle": "Umschalten"
|
||||
},
|
||||
@@ -582,7 +576,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Löschen",
|
||||
"entity": "Entität",
|
||||
"no_match": "Keine übereinstimmende Entitäten gefunden",
|
||||
"show_entities": "Entitäten anzeigen"
|
||||
}
|
||||
},
|
||||
@@ -599,7 +592,7 @@
|
||||
"changed_to_state": "wechselte zu {state}",
|
||||
"cleared_device_class": "gelöscht (keine {device_class} erkannt)",
|
||||
"detected_device_class": "erkannt {device_class}",
|
||||
"rose": "aufgegangen",
|
||||
"rose": "gestiegen",
|
||||
"set": "einstellen",
|
||||
"turned_off": "ausgeschaltet",
|
||||
"turned_on": "eingeschaltet",
|
||||
@@ -662,7 +655,7 @@
|
||||
"media-player-browser": "Medien-Browser",
|
||||
"no_items": "Keine Einträge",
|
||||
"no_local_media_found": "Keine lokalen Medien gefunden",
|
||||
"no_media_folder": "Es sieht so aus, als hättest du noch kein Medienverzeichnis erstellt.",
|
||||
"no_media_folder": "Es sieht so aus, als hätten Sie noch kein Medienverzeichnis erstellt.",
|
||||
"pick": "Auswählen",
|
||||
"pick-media": "Medien auswählen",
|
||||
"play": "Abspielen",
|
||||
@@ -716,16 +709,6 @@
|
||||
"service-picker": {
|
||||
"service": "Dienst"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Bereich auswählen",
|
||||
"add_device_id": "Gerät auswählen",
|
||||
"add_entity_id": "Entität auswählen",
|
||||
"expand_area_id": "Erweitere diesen Bereich in einzelne Geräte und Entitäten. Nach der Erweiterung werden die Geräte und Entitäten nicht aktualisiert, wenn sich der Bereich ändert.",
|
||||
"expand_device_id": "Erweitern Sie dieses Gerät in separate Entitäten. Nach dem Erweitern werden die Entitäten nicht aktualisiert, wenn sich das Gerät ändert.",
|
||||
"remove_area_id": "Bereich entfernen",
|
||||
"remove_device_id": "Gerät entfernen",
|
||||
"remove_entity_id": "Entität entfernen"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Benutzer hinzufügen",
|
||||
"no_user": "Kein Benutzer",
|
||||
@@ -749,7 +732,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Möchtest du diesen Eintrag wirklich löschen?",
|
||||
"delete": "Löschen",
|
||||
"device_disabled": "Das Gerät dieser Entität ist deaktiviert.",
|
||||
"enabled_cause": "Deaktiviert durch {cause}.",
|
||||
"enabled_delay_confirm": "Die aktivierten Entitäten werden in {delay} Sekunden zu Home Assistant hinzugefügt",
|
||||
"enabled_description": "Deaktivierte Entitäten werden nicht zu Home Assistant hinzugefügt.",
|
||||
@@ -760,7 +742,6 @@
|
||||
"icon_error": "Symbole sollten das Format 'Präfix:iconname' haben, z. B. 'mdi:home'",
|
||||
"name": "Namen",
|
||||
"note": "Hinweis: Dies funktioniert möglicherweise noch nicht bei allen Integrationen.",
|
||||
"open_device_settings": "Geräteeinstellungen öffnen",
|
||||
"unavailable": "Diese Entität ist derzeit nicht verfügbar.",
|
||||
"update": "Aktualisieren"
|
||||
},
|
||||
@@ -816,7 +797,7 @@
|
||||
"pattern": "Regex-Muster für die clientseitige Validierung",
|
||||
"text": "Text"
|
||||
},
|
||||
"platform_not_loaded": "Die {platform}-Integration ist nicht geladen. Bitte füge sie deiner Konfiguration hinzu, indem du entweder 'default_config:' oder ''{platform}:'' einfügst.",
|
||||
"platform_not_loaded": "Die {platform} -Komponente ist nicht geladen. Füge sie bitte deiner Konfiguration hinzu. Entweder durch Hinzufügen von 'default_config:' oder ''{platform}:''.",
|
||||
"required_error_msg": "Dieses Feld ist erforderlich",
|
||||
"timer": {
|
||||
"duration": "Dauer"
|
||||
@@ -840,7 +821,7 @@
|
||||
"edit": "Entität bearbeiten",
|
||||
"history": "Verlauf",
|
||||
"last_changed": "Zuletzt geändert",
|
||||
"last_updated": "Zuletzt aktualisiert",
|
||||
"last_updated": "Letztes Update",
|
||||
"person": {
|
||||
"create_zone": "Zone vom aktuellen Standort erstellen"
|
||||
},
|
||||
@@ -901,7 +882,7 @@
|
||||
"navigation": {
|
||||
"areas": "Bereiche",
|
||||
"automation": "Automatisierungen",
|
||||
"blueprint": "Vorlagen",
|
||||
"blueprint": "Baupläne",
|
||||
"core": "Allgemein",
|
||||
"customize": "Anpassungen",
|
||||
"devices": "Geräte",
|
||||
@@ -923,13 +904,13 @@
|
||||
},
|
||||
"reload": {
|
||||
"automation": "Automationen neu laden",
|
||||
"command_line": "Komandozeilenentätien neu laden",
|
||||
"core": "Positionsdaten und Anpassungen neu laden",
|
||||
"command_line": "Komandozeilen Entätien neu laden",
|
||||
"core": "Positionsdaten & Anpassungen neu laden",
|
||||
"filesize": "Dateigröße-Entitäten neu laden",
|
||||
"filter": "Filterentitäten neu laden",
|
||||
"generic": "Allgemeine IP-Kamera-Entitäten neu laden",
|
||||
"generic_thermostat": "Allgemeine Thermostat-Entitäten neu laden",
|
||||
"group": "Gruppen, Gruppenentitäten und Benachrichtigungsservices neu laden",
|
||||
"filter": "Filter Entitäten neu laden",
|
||||
"generic": "Allgemeine IP Kamera Entitäten neu laden",
|
||||
"generic_thermostat": "Allgemeine Thermostat Entitäte neu laden",
|
||||
"group": "Gruppen, Gruppen Entitäten und Benachrichtigungsservices neu laden",
|
||||
"history_stats": "Verlaufsstatistiken neu laden",
|
||||
"homekit": "HomeKit neu laden",
|
||||
"input_boolean": "Input-Booleans neu laden",
|
||||
@@ -942,16 +923,16 @@
|
||||
"person": "Personen neu laden",
|
||||
"ping": "Binäre-Ping-Entitäten neu laden",
|
||||
"reload": "{domain} neu laden",
|
||||
"rest": "REST-Entitäten und Benachrichtigunsdienste neu laden",
|
||||
"rest": "Rest Entitäten und Benachrichtigunsdienste neu laden",
|
||||
"rpi_gpio": "Raspberry Pi GPIO Entitäten neu laden",
|
||||
"scene": "Szenen neu laden",
|
||||
"script": "Skripte neu laden",
|
||||
"smtp": "SMTP-Benachrichtigungsdienst neu laden",
|
||||
"statistics": "Statistikentitäten neu laden",
|
||||
"statistics": "Statistik Entitäten neu laden",
|
||||
"telegram": "Telegram-Benachrichtigungsdienst neu laden",
|
||||
"template": "Templates neu laden",
|
||||
"trend": "Trend-Entitäten neu laden",
|
||||
"universal": "Universelle Medien-Player-Entitäten neu laden",
|
||||
"trend": "Trend Entitäten neu laden",
|
||||
"universal": "Universelle Medien Player Entitäten neu laden",
|
||||
"zone": "Zonen neu laden"
|
||||
},
|
||||
"server_control": {
|
||||
@@ -1039,16 +1020,16 @@
|
||||
"link_profile_page": "deine Profilseite"
|
||||
},
|
||||
"areas": {
|
||||
"caption": "Bereiche",
|
||||
"caption": "Bereichsregister",
|
||||
"data_table": {
|
||||
"area": "Bereich",
|
||||
"devices": "Geräte"
|
||||
},
|
||||
"delete": {
|
||||
"confirmation_text": "Die Zuordnung aller Geräte zu diesem Bereich wird aufgelöst.",
|
||||
"confirmation_text": "Alle Geräte in diesem Bereich werden nicht mehr zugewiesen sein.",
|
||||
"confirmation_title": "Möchtest du diesen Bereich wirklich löschen?"
|
||||
},
|
||||
"description": "Geräte und Entitäten in Bereiche gruppieren",
|
||||
"description": "Bereiche in deinem Zuhause verwalten",
|
||||
"editor": {
|
||||
"area_id": "Bereich-ID",
|
||||
"create": "Erstellen",
|
||||
@@ -1065,15 +1046,15 @@
|
||||
"integrations_page": "Integrationsseite",
|
||||
"introduction": "In Bereichen wird festgelegt, wo sich Geräte befinden. Diese Informationen werden in Home Assistant verwendet, um Sie bei der Organisation Ihrer Benutzeroberfläche, Berechtigungen und Integrationen mit anderen Systemen zu unterstützen.",
|
||||
"introduction2": "Um Geräte in einem Bereich zu platzieren, navigiere mit dem Link unten zur Integrationsseite und klicke dann auf eine konfigurierte Integration, um zu den Gerätekarten zu gelangen.",
|
||||
"no_areas": "Sieht aus als hättest du noch keine Bereiche!"
|
||||
"no_areas": "Sieht aus, als hätten Sie noch keine Bereiche!"
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automatisierungen",
|
||||
"description": "Individuelle Regeln für dein Zuhause erstellen",
|
||||
"caption": "Automatisierung",
|
||||
"description": "Automatisierungen verwalten",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Eine Vorlage verwenden"
|
||||
"use_blueprint": "Einen Bauplan benutzen"
|
||||
},
|
||||
"header": "Erstelle eine neue Automatisierung",
|
||||
"how": "Wie möchtest du deine neue Automatisierung erstellen?",
|
||||
@@ -1082,7 +1063,7 @@
|
||||
"create": "Erstellen",
|
||||
"header": "Beschreibe die Automatisierung, die du erstellen möchtest",
|
||||
"input_label": "Was soll diese Automatisierung tun?",
|
||||
"intro": "Und wir werden versuchen, sie für dich zu erstellen. Zum Beispiel: Schalte das Licht aus, wenn ich gehe."
|
||||
"intro": "Und wir werden versuchen, es für dich zu erstellen. Zum Beispiel: Schalten das Licht aus, wenn ich gehe."
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
@@ -1134,11 +1115,11 @@
|
||||
"label": "Anzahl"
|
||||
},
|
||||
"until": {
|
||||
"conditions": "Bis-Bedingungen",
|
||||
"conditions": "Bis Bedingungen",
|
||||
"label": "Bis"
|
||||
},
|
||||
"while": {
|
||||
"conditions": "Während-Bedingungen",
|
||||
"conditions": "Während Bedingungen",
|
||||
"label": "Während"
|
||||
}
|
||||
}
|
||||
@@ -1166,12 +1147,12 @@
|
||||
},
|
||||
"alias": "Name",
|
||||
"blueprint": {
|
||||
"blueprint_to_use": "Zu verwendende Vorlage",
|
||||
"header": "Vorlage",
|
||||
"blueprint_to_use": "Zu verwendender Bauplan",
|
||||
"header": "Bauplan",
|
||||
"inputs": "Eingänge",
|
||||
"manage_blueprints": "Vorlagen verwalten",
|
||||
"no_blueprints": "Du hast keine Vorlagen",
|
||||
"no_inputs": "Diese Vorlage hat keine Eingänge."
|
||||
"manage_blueprints": "Baupläne verwalten",
|
||||
"no_blueprints": "Du hast keine Baupläne",
|
||||
"no_inputs": "Dieser Bauplan hat keine Eingänge."
|
||||
},
|
||||
"conditions": {
|
||||
"add": "Bedingung hinzufügen",
|
||||
@@ -1266,7 +1247,7 @@
|
||||
"queued": "Länge der Warteschlange"
|
||||
},
|
||||
"modes": {
|
||||
"description": "Der Modus steuert, was passiert, wenn ein Skript aufgerufen wird, während es noch von einem oder mehreren vorherigen Aufrufen ausgeführt wird. Lies {documentation_link} für weitere Informationen.",
|
||||
"description": "Der Modus steuert, was passiert, wenn ein Skript aufgerufen wird, während es noch von einem oder mehreren vorherigen Aufrufen ausgeführt wird. Überprüfen Sie den {documentation_link} für weitere Informationen.",
|
||||
"documentation": "Automatisierungs-Dokumentation",
|
||||
"label": "Modus",
|
||||
"parallel": "Parallel",
|
||||
@@ -1360,7 +1341,7 @@
|
||||
"time": {
|
||||
"at": "Um",
|
||||
"label": "Zeit",
|
||||
"type_input": "Wert eines Datums-/Zeit-Helfers",
|
||||
"type_input": "Wert eines Datum/Zeit-Helfers",
|
||||
"type_value": "Feste Zeit"
|
||||
},
|
||||
"webhook": {
|
||||
@@ -1417,37 +1398,31 @@
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "Community-Foren",
|
||||
"error_no_url": "Bitte gebe die URL der Vorlage ein.",
|
||||
"file_name": "Vorlagenpfad",
|
||||
"header": "Vorlage importieren",
|
||||
"import_btn": "Vorschau Vorlage",
|
||||
"import_header": "Vorlage \"{name}\"",
|
||||
"import_introduction": "Du kannst Vorlagen anderer Benutzer aus GitHub und den Community-Foren importieren. Gib die URL der Vorlage unten ein.",
|
||||
"import_introduction_link": "Du kannst Vorlagen anderer Benutzer aus GitHub und den {community_link} importieren. Gib unten die URL der Vorlage ein.",
|
||||
"importing": "Vorlage wird geladen...",
|
||||
"raw_blueprint": "Inhalt der Vorlage",
|
||||
"save_btn": "Vorlage importieren",
|
||||
"saving": "Vorlage wird importiert...",
|
||||
"unsupported_blueprint": "Diese Vorlage wird nicht unterstützt",
|
||||
"url": "URL der Vorlage"
|
||||
"error_no_url": "Bitte gebe die URL des Bauplans ein.",
|
||||
"header": "Neuen Bauplan hinzufügen",
|
||||
"import_btn": "Bauplan importieren",
|
||||
"import_header": "{name}({domain}) importieren",
|
||||
"import_introduction": "Du kannst Baupläne anderer Benutzer aus GitHub und den Community-Foren importieren. Gib die URL des Bauplans unten ein.",
|
||||
"importing": "Bauplan wird importiert...",
|
||||
"save_btn": "Bauplan speichern",
|
||||
"saving": "Bauplan wir gespeichert...",
|
||||
"unsupported_blueprint": "Dieser Bauplan wird nicht unterstützt",
|
||||
"url": "URL des Bauplans"
|
||||
},
|
||||
"caption": "Vorlagen",
|
||||
"description": "Vorlagen verwalten",
|
||||
"caption": "Baupläne",
|
||||
"description": "Baupläne verwalten",
|
||||
"overview": {
|
||||
"add_blueprint": "Vorlage hinzufügen",
|
||||
"confirm_delete_header": "Diese Vorlage löschen?",
|
||||
"confirm_delete_text": "Bist du sicher, dass du diese Vorlage löschen möchtest?",
|
||||
"delete_blueprint": "Vorlage löschen",
|
||||
"discover_more": "Entdecke weitere Vorlagen",
|
||||
"header": "Vorlagen-Editor",
|
||||
"add_blueprint": "Bauplan hinzufügen",
|
||||
"confirm_delete_header": "Diesen Bauplan löschen?",
|
||||
"confirm_delete_text": "Bist du sicher, dass du diesen Bauplan löschen möchtest?",
|
||||
"header": "Bauplan-Editor",
|
||||
"headers": {
|
||||
"domain": "Domain",
|
||||
"file_name": "Dateiname",
|
||||
"name": "Name"
|
||||
},
|
||||
"introduction": "Mit der Vorlagenkonfiguration kannst du deine Vorlagen importieren und verwalten.",
|
||||
"learn_more": "Erfahre mehr über die Benutzung von Vorlagen",
|
||||
"introduction": "Mit dem Bauplan-Editor kannst du Baupläne erstellen und bearbeiten.",
|
||||
"learn_more": "Erfahre mehr über Baupläne",
|
||||
"use_blueprint": "Automatisierung erstellen"
|
||||
}
|
||||
},
|
||||
@@ -1531,7 +1506,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Fernsteuerung und Integration mit Alexa und Google Assistant",
|
||||
"description_features": "Fernsteuerung und Integration mit Alexa und Google Assistant.",
|
||||
"description_login": "Angemeldet als {email}",
|
||||
"description_not_login": "Nicht angemeldet",
|
||||
"dialog_certificate": {
|
||||
@@ -1626,7 +1601,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "Allgemein",
|
||||
"description": "Mengeneinheiten, Standort, Zeitzone & andere allgemeine Parameter",
|
||||
"description": "Bearbeite die allgemeine Konfiguration von Home Assistant",
|
||||
"section": {
|
||||
"core": {
|
||||
"core_config": {
|
||||
@@ -1658,7 +1633,7 @@
|
||||
"attributes_override": "Du kannst sie überschreiben, wenn du möchtest.",
|
||||
"attributes_set": "Die folgenden Attribute der Entität sind programmatisch festgelegt.",
|
||||
"caption": "Anpassung",
|
||||
"description": "Entitäten individuell anpassen",
|
||||
"description": "Elemente anpassen",
|
||||
"different_include": "Möglich über eine Domain, einen Glob oder einen anderen Include.",
|
||||
"pick_attribute": "Wähle ein Attribut zum Überschreiben aus.",
|
||||
"picker": {
|
||||
@@ -1688,7 +1663,6 @@
|
||||
"unknown_condition": "Unbekannte Bedingung"
|
||||
},
|
||||
"create": "Automatisierung mit Gerät erstellen",
|
||||
"create_disable": "Kann keine Automatisierung mit deaktiviertem Gerät erstellen",
|
||||
"no_automations": "Keine Automatisierungen",
|
||||
"no_device_automations": "Für dieses Gerät sind keine Automatisierungen verfügbar.",
|
||||
"triggers": {
|
||||
@@ -1702,7 +1676,7 @@
|
||||
"caption": "Geräte",
|
||||
"confirm_delete": "Möchtest du dieses Gerät wirklich löschen?",
|
||||
"confirm_rename_entity_ids": "Möchten Sie auch die Entitäts-IDs Ihrer Entitäten umbenennen?",
|
||||
"confirm_rename_entity_ids_warning": "Dies ändert keine Konfiguration (wie Automatisierungen, Skripte, Szenen, Dashboards), die derzeit diese Entitäten verwendet! Du musst sie selbst aktualisieren, um die neuen Entitäts-IDs zu verwenden!",
|
||||
"confirm_rename_entity_ids_warning": "Dies ändert keine Konfiguration (wie Automatisierungen, Skripte, Szenen, Dashboards), die derzeit diese Entitäten verwendet! Sie müssen sie selbst aktualisieren, um die neuen Entitäts-IDs zu verwenden!",
|
||||
"data_table": {
|
||||
"area": "Bereich",
|
||||
"battery": "Batterie",
|
||||
@@ -1717,43 +1691,23 @@
|
||||
"description": "Verbundene Geräte verwalten",
|
||||
"device_info": "Geräteinformationen",
|
||||
"device_not_found": "Gerät nicht gefunden.",
|
||||
"disabled": "Deaktiviert",
|
||||
"disabled_by": {
|
||||
"config_entry": "Konfigurationseintrag",
|
||||
"integration": "Integration",
|
||||
"user": "Benutzer"
|
||||
},
|
||||
"enabled_cause": "Das Gerät ist durch {cause} deaktiviert.",
|
||||
"enabled_description": "Deaktivierte Geräte werden nicht angezeigt und zum Gerät gehörende Entitäten werden deaktiviert und nicht zum Home Assistant hinzugefügt.",
|
||||
"enabled_label": "Gerät aktivieren",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Zu Lovelace hinzufügen",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {deaktivierte Entität}\n other {deaktivierte Entitäten}\n}",
|
||||
"entities": "Entitäten",
|
||||
"hide_disabled": "Deaktivierte ausblenden",
|
||||
"hide_disabled": "Ausblenden deaktiviert",
|
||||
"none": "Dieses Gerät hat keine Entitäten"
|
||||
},
|
||||
"name": "Name",
|
||||
"no_devices": "Keine Geräte",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filter",
|
||||
"hidden_devices": "{number} {number, plural,\n one {verstecktes Gerät}\n other {versteckte Geräte}\n}",
|
||||
"show_all": "Alle anzeigen",
|
||||
"show_disabled": "Deaktivierte Geräte anzeigen"
|
||||
},
|
||||
"search": "Geräte suchen"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Szene mit Gerät erstellen",
|
||||
"create_disable": "Kann keine Szene mit deaktiviertem Gerät erstellen",
|
||||
"no_scenes": "Keine Szenen",
|
||||
"scenes": "Szenen"
|
||||
},
|
||||
"scenes": "Szenen",
|
||||
"script": {
|
||||
"create": "Szene mit Gerät erstellen",
|
||||
"create_disable": "Kann kein Skript mit deaktiviertem Gerät erstellen",
|
||||
"no_scripts": "Keine Skripte",
|
||||
"scripts": "Skripte"
|
||||
},
|
||||
@@ -1786,7 +1740,6 @@
|
||||
},
|
||||
"header": "Entitäten",
|
||||
"headers": {
|
||||
"area": "Bereich",
|
||||
"entity_id": "Entitäts-ID",
|
||||
"integration": "Integration",
|
||||
"name": "Name",
|
||||
@@ -1819,7 +1772,7 @@
|
||||
"header": "Home Assistant konfigurieren",
|
||||
"helpers": {
|
||||
"caption": "Helfer",
|
||||
"description": "Elemente verwalten, die beim Aufbau von Automatisierungen helfen",
|
||||
"description": "Elemente verwalten, die beim Aufbau von Automatisierungen helfen können.",
|
||||
"dialog": {
|
||||
"add_helper": "Helfer hinzufügen",
|
||||
"add_platform": "{platform} hinzufügen",
|
||||
@@ -1851,7 +1804,7 @@
|
||||
"copy_github": "Für GitHub",
|
||||
"copy_raw": "Roher Text",
|
||||
"custom_uis": "Benutzerdefinierte UIs:",
|
||||
"description": "Version, Systemzustand und Links zur Dokumentation",
|
||||
"description": "Informationen über deine Home Assistant Installation",
|
||||
"developed_by": "Entwickelt von einem Haufen toller Leute.",
|
||||
"documentation": "Dokumentation",
|
||||
"frontend": "Frontend-UI",
|
||||
@@ -1931,7 +1884,7 @@
|
||||
"options": "Optionen",
|
||||
"reload": "Neu laden",
|
||||
"reload_confirm": "Die Integration wurde neu geladen",
|
||||
"reload_restart_confirm": "Home Assistant neu starten, um das Neuladen dieser Integration abzuschließen",
|
||||
"reload_restart_confirm": "Home Assistant neustarten, um das Neuladen dieser Integration abzuschließen",
|
||||
"rename": "Umbenennen",
|
||||
"restart_confirm": "Starte Home Assistant neu, um das Entfernen dieser Integration abzuschließen",
|
||||
"services": "{count} {count, plural,\n one {Dienst}\n other {Dienste}\n}",
|
||||
@@ -1957,7 +1910,7 @@
|
||||
},
|
||||
"configure": "Konfigurieren",
|
||||
"configured": "Konfiguriert",
|
||||
"description": "Integrationen zu Diensten, Geräten, usw. verwalten",
|
||||
"description": "Verbundene Integrationen verwalten",
|
||||
"details": "Details zur Integration",
|
||||
"discovered": "Entdeckt",
|
||||
"home_assistant_website": "Home Assistant Website",
|
||||
@@ -1975,7 +1928,7 @@
|
||||
"integration": "Integration",
|
||||
"integration_not_found": "Integration nicht gefunden.",
|
||||
"new": "Richte eine neue Integration ein",
|
||||
"no_integrations": "Du hast anscheinend noch keine Integrationen konfiguriert. Klicke auf die Schaltfläche unten, um eine erste Integration hinzuzufügen!",
|
||||
"no_integrations": "Du hast anscheinend noch keine Integrationen konfiguriert. Klicke auf die Schaltfläche unten, um Deine erste Integration hinzuzufügen!",
|
||||
"none": "Noch nichts konfiguriert",
|
||||
"none_found": "Keine Integrationen gefunden",
|
||||
"none_found_detail": "Passe deine Suchkriterien an.",
|
||||
@@ -1990,7 +1943,7 @@
|
||||
"logs": {
|
||||
"caption": "Logs",
|
||||
"clear": "Leeren",
|
||||
"description": "Home Assistant Logs einsehen",
|
||||
"description": "Die Home Assistant Logs anschauen",
|
||||
"details": "Protokolldetails ( {level} )",
|
||||
"load_full_log": "Vollständiges Home Assistant-Protokoll laden",
|
||||
"loading_log": "Fehlerprotokoll wird geladen...",
|
||||
@@ -2007,7 +1960,7 @@
|
||||
"cant_edit_yaml": "In YAML definierte Dashboards können nicht über die Benutzeroberfläche bearbeitet werden. Du kannst sie aber in der configuration.yaml ändern.",
|
||||
"caption": "Dashboards",
|
||||
"conf_mode": {
|
||||
"storage": "Grafischer Editor",
|
||||
"storage": "UI gesteuert",
|
||||
"yaml": "YAML-Datei"
|
||||
},
|
||||
"confirm_delete": "Bist du sicher, dass du dieses Dashboard löschen möchtest?",
|
||||
@@ -2035,14 +1988,14 @@
|
||||
"conf_mode": "Konfigurationsmethode",
|
||||
"default": "Standard",
|
||||
"filename": "Dateiname",
|
||||
"require_admin": "Nur Admin",
|
||||
"require_admin": "Nur für Administratoren",
|
||||
"sidebar": "In der Seitenleiste anzeigen",
|
||||
"title": "Titel"
|
||||
},
|
||||
"open": "Öffnen"
|
||||
}
|
||||
},
|
||||
"description": "Erstelle individuelle Oberflächen, um dein Zuhause zu steuern",
|
||||
"description": "Konfiguriere deine Lovelace-Dashboards",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Du verwendest Lovelace im YAML-Modus. Daher kannst du deine Ressourcen nicht über die Benutzeroberfläche verwalten. Verwalte sie in der configuration.yaml.",
|
||||
"caption": "Ressourcen",
|
||||
@@ -2057,7 +2010,7 @@
|
||||
"url": "URL",
|
||||
"url_error_msg": "URL ist ein Pflichtfeld",
|
||||
"warning_header": "Sei vorsichtig!",
|
||||
"warning_text": "Das Hinzufügen von Ressourcen kann gefährlich sein. Stelle sicher, dass du die Quelle der Ressource kennst und ihr vertraust. Ressourcen aus bösartigen Quellen können dein System ernsthaft beschädigen."
|
||||
"warning_text": "Das Hinzufügen von Ressourcen kann gefährlich sein. Stelle sicher, dass du die Quelle der Ressource kennst und ihr vertraust. Schlechte Ressourcen können dein System ernsthaft beschädigen."
|
||||
},
|
||||
"picker": {
|
||||
"add_resource": "Ressource hinzufügen",
|
||||
@@ -2100,7 +2053,7 @@
|
||||
"node_id": "Knoten-ID",
|
||||
"ozw_instance": "OpenZWave-Instanz",
|
||||
"query_stage": "Abfragephase",
|
||||
"wakeup_instructions": "Aufweckanleitung",
|
||||
"wakeup_instructions": "Weckanleitung",
|
||||
"zwave": "Z-Wave"
|
||||
},
|
||||
"device_info": {
|
||||
@@ -2139,12 +2092,12 @@
|
||||
},
|
||||
"network": {
|
||||
"header": "Netzwerkverwaltung",
|
||||
"introduction": "Verwalten netzwerkweiter Funktionen.",
|
||||
"introduction": "Verwalten Sie netzwerkweite Funktionen.",
|
||||
"node_count": "{count} Knoten"
|
||||
},
|
||||
"node_config": {
|
||||
"header": "Knotenkonfiguration",
|
||||
"help_source": "Hilfetexte und Beschreibungen der Konfigurationsparameter stellt das OpenZWave-Projekt zur Verfügung.",
|
||||
"help_source": "Konfigurationsparameterbeschreibungen und Hilfetexte werden vom OpenZWave-Projekt bereitgestellt.",
|
||||
"introduction": "Verwalten Sie die verschiedenen Konfigurationsparameter für einen Z-Wave Knoten.",
|
||||
"wakeup_help": "Batteriebetriebene Knoten müssen wach sein, um ihre Konfiguration zu ändern. Wenn der Knoten nicht aktiv ist, versucht OpenZWave beim nächsten Aufwachen, die Konfiguration des Knotens zu aktualisieren. Dies kann mehrere Stunden (oder Tage) später sein. Führen Sie die folgenden Schritte aus, um Ihr Gerät zu aktivieren:"
|
||||
},
|
||||
@@ -2197,8 +2150,8 @@
|
||||
},
|
||||
"select_instance": {
|
||||
"header": "OpenZWave Instanz auswählen",
|
||||
"introduction": "Du hast mehr als eine aktive OpenZWave-Instanz. Welche möchtest du verwalten?",
|
||||
"none_found": "Wir haben keine OpenZWave-Instanz gefunden. Wenn du der Meinung bist, dass dies nicht korrekt ist, überprüfe deine OpenZWave- und MQTT-Setups und stelle sicher, dass der Home Assistant mit dem MQTT-Broker kommunizieren kann."
|
||||
"introduction": "Sie haben mehr als eine OpenZWave-Instanz ausgeführt. Welche Instanz möchten Sie verwalten?",
|
||||
"none_found": "Wir haben keine OpenZWave-Instanz gefunden. Wenn Sie der Meinung sind, dass dies nicht korrekt ist, überprüfen Sie Ihre OpenZWave- und MQTT-Setups und stellen Sie sicher, dass der Home Assistant mit Ihrem MQTT-Broker kommunizieren kann."
|
||||
},
|
||||
"services": {
|
||||
"add_node": "Knoten hinzufügen",
|
||||
@@ -2212,11 +2165,11 @@
|
||||
"confirm_delete": "Möchtest du diese Person wirklich löschen?",
|
||||
"confirm_delete2": "Alle Geräte, die zu dieser Person gehören, werden nicht mehr zugeordnet.",
|
||||
"create_person": "Person erstellen",
|
||||
"description": "Personen verwalten, denen Home Assistant folgt",
|
||||
"description": "Personen verwalten, denen Home Assistant folgt.",
|
||||
"detail": {
|
||||
"admin": "Administrator",
|
||||
"allow_login": "Erlaube dieser Person, sich einzuloggen.",
|
||||
"confirm_delete_user": "Bist Du sicher, dass Du das Benutzerkonto für {name} löschen möchtest? Du kannst der Person immer noch folgen, aber sie kann sich nicht mehr anmelden.",
|
||||
"allow_login": "Erlauben Sie dieser Person, sich einzuloggen.",
|
||||
"confirm_delete_user": "Bist Du sicher, dass Du das Benutzerkonto von {name} löschen möchtest? Du kannst der Person immer noch folgen, aber sie kann sich nicht mehr anmelden.",
|
||||
"create": "Erstellen",
|
||||
"delete": "Löschen",
|
||||
"device_tracker_intro": "Wähle die Geräte, die dieser Person gehören.",
|
||||
@@ -2241,7 +2194,7 @@
|
||||
"scene": {
|
||||
"activated": "Aktivierte Szene {name}.",
|
||||
"caption": "Szenen",
|
||||
"description": "Gerätezustände erfassen und später einfach wieder abrufen",
|
||||
"description": "Szenen verwalten",
|
||||
"editor": {
|
||||
"default_name": "Neue Szene",
|
||||
"devices": {
|
||||
@@ -2259,7 +2212,7 @@
|
||||
"without_device": "Entitäten ohne Gerät"
|
||||
},
|
||||
"icon": "Symbol",
|
||||
"introduction": "Benutze Szenen, um deinem Zuhause Leben einzuhauchen.",
|
||||
"introduction": "Benutze Szenen um deinem Zuhause Leben einzuhauchen.",
|
||||
"load_error_not_editable": "Nur Szenen in der scenes.yaml sind editierbar.",
|
||||
"load_error_unknown": "Fehler beim Laden der Szene ({err_no}).",
|
||||
"name": "Name",
|
||||
@@ -2284,8 +2237,8 @@
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
"caption": "Skripte",
|
||||
"description": "Eine Sequenz aus Aktionen ausführen",
|
||||
"caption": "Skript",
|
||||
"description": "Skripte verwalten",
|
||||
"editor": {
|
||||
"alias": "Name",
|
||||
"default_name": "Neues Skript",
|
||||
@@ -2304,7 +2257,7 @@
|
||||
"queued": "Länge der Warteschlange"
|
||||
},
|
||||
"modes": {
|
||||
"description": "Der Modus steuert, was passiert, wenn ein Skript aufgerufen wird, während es noch von einem oder mehreren vorherigen Aufrufen ausgeführt wird. Lies {documentation_link} für weitere Informationen.",
|
||||
"description": "Der Modus steuert, was passiert, wenn ein Skript aufgerufen wird, während es noch von einem oder mehreren vorherigen Aufrufen ausgeführt wird. Überprüfen Sie den {documentation_link} für weitere Informationen.",
|
||||
"documentation": "Skript-Dokumentation",
|
||||
"label": "Modus",
|
||||
"parallel": "Parallel",
|
||||
@@ -2358,7 +2311,7 @@
|
||||
"min_max": "Min/Max-Entitäten neu laden",
|
||||
"mqtt": "Lade manuell konfigurierte MQTT-Entitäten neu",
|
||||
"person": "Personen neu laden",
|
||||
"ping": "Binäre Ping Sensorentitäten neu laden",
|
||||
"ping": "Binäre Ping-Sensorentitäten neu laden",
|
||||
"reload": "{domain} neu laden",
|
||||
"rest": "Rest Entitäten und Benachrichtigungsdienste neu laden",
|
||||
"rpi_gpio": "Raspberry Pi GPIO Entitäten neu laden",
|
||||
@@ -2368,7 +2321,7 @@
|
||||
"statistics": "Statistik-Entitäten neu laden",
|
||||
"telegram": "Telegram-Benachrichtigungsdienste neu laden",
|
||||
"template": "Vorlagenentitäten neu laden",
|
||||
"trend": "Trend-Entitäten neu laden",
|
||||
"trend": "Trendentitäten neu laden",
|
||||
"universal": "Universelle Media Player-Entitäten neu laden",
|
||||
"zone": "Zonen neu laden"
|
||||
},
|
||||
@@ -2384,7 +2337,7 @@
|
||||
"check_config": "Konfiguration prüfen",
|
||||
"heading": "Konfiguration überprüfen",
|
||||
"introduction": "Überprüfen Sie Ihre Konfiguration, wenn Sie kürzlich Änderungen vorgenommen haben und sicherstellen möchten, dass alle Änderungen gültig sind",
|
||||
"invalid": "Konfiguration fehlerhaft",
|
||||
"invalid": "Konfiguration ungültig",
|
||||
"valid": "Konfiguration in Ordnung"
|
||||
}
|
||||
}
|
||||
@@ -2396,7 +2349,7 @@
|
||||
"confirm_remove": "Möchtest du den Tag {tag} wirklich entfernen?",
|
||||
"confirm_remove_title": "Tag entfernen?",
|
||||
"create_automation": "Automatisierung mit NFC Tag erstellen",
|
||||
"description": "Automatisierungen auslösen wenn NFC Tag, QR Code, usw. gescannt wird",
|
||||
"description": "NFC Tags verwalten",
|
||||
"detail": {
|
||||
"companion_apps": "Mobile Apps",
|
||||
"create": "Erstellen",
|
||||
@@ -2408,7 +2361,7 @@
|
||||
"tag_id": "NFC Tag ID",
|
||||
"tag_id_placeholder": "Automatisch generiert, wenn leer gelassen",
|
||||
"update": "Aktualisieren",
|
||||
"usage": "Ein Tag kann eine Automatisierung auslösen, wenn er gescannt wird. Du kannst NFC-Tags, QR-Codes oder jede andere Art von Tags verwenden. Verwende unsere {companion_link}, um diesen Tag in ein programmierbares NFC-Tag zu schreiben oder einen QR-Code zu erstellen."
|
||||
"usage": "Ein Tag kann eine Automatisierung auslösen, wenn er gescannt wird. Sie können NFC-Tags, QR-Codes oder jede andere Art von Tags verwenden. Verwenden Sie unsere {companion_link}, um diesen Tag in ein programmierbares NFC-Tag zu schreiben oder einen QR-Code zu erstellen."
|
||||
},
|
||||
"edit": "Bearbeiten",
|
||||
"headers": {
|
||||
@@ -2431,11 +2384,10 @@
|
||||
"username": "Benutzername"
|
||||
},
|
||||
"caption": "Benutzer",
|
||||
"description": "Home Assistant Benutzerkonten verwalten",
|
||||
"description": "Benutzer verwalten",
|
||||
"editor": {
|
||||
"activate_user": "Benutzer aktivieren",
|
||||
"active": "Aktiv",
|
||||
"active_tooltip": "Steuert, ob sich der Benutzer anmelden kann",
|
||||
"admin": "Administrator",
|
||||
"caption": "Benutzer anzeigen",
|
||||
"change_password": "Passwort ändern",
|
||||
@@ -2444,29 +2396,25 @@
|
||||
"delete_user": "Benutzer löschen",
|
||||
"group": "Gruppe",
|
||||
"id": "ID",
|
||||
"name": "Anzeigename",
|
||||
"name": "Name",
|
||||
"new_password": "Neues Passwort",
|
||||
"owner": "Besitzer",
|
||||
"password_changed": "Das Passwort wurde erfolgreich geändert",
|
||||
"system_generated": "Systemgeneriert",
|
||||
"system_generated": "System generiert",
|
||||
"system_generated_users_not_editable": "Systemgenerierte Benutzer können nicht aktualisiert werden.",
|
||||
"system_generated_users_not_removable": "Systemgenerierte Benutzer können nicht entfernt werden.",
|
||||
"unnamed_user": "Namenloser Benutzer",
|
||||
"update_user": "Aktualisieren",
|
||||
"username": "Benutzername"
|
||||
"system_generated_users_not_removable": "Vom System generierte Benutzer können nicht entfernt werden.",
|
||||
"unnamed_user": "Unbenannter Benutzer",
|
||||
"update_user": "Aktualisieren"
|
||||
},
|
||||
"picker": {
|
||||
"add_user": "Benutzer hinzufügen",
|
||||
"headers": {
|
||||
"group": "Gruppe",
|
||||
"is_active": "Aktiv",
|
||||
"is_owner": "Besitzer",
|
||||
"name": "Anzeigename",
|
||||
"system": "System generiert",
|
||||
"username": "Benutzername"
|
||||
"name": "Name",
|
||||
"system": "System"
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "Benutzergruppen befinden sich derzeit noch in Entwicklung. Der Benutzer wird nicht in der Lage sein, Änderungen an der Instanz über die Benutzeroberfläche vorzunehmen. Derzeit überprüfen wir noch alle API Endpunkte und stellen sicher, dass diese nur von Administratoren genutzt werden können."
|
||||
"users_privileges_note": "Benutzergruppen sind derzeit noch in Entwicklung. Der Benutzer wird nicht in der Lage sein, Änderungen an der Instanz über das UI vorzunehmen. Derzeit überprüfen wir noch alle API Endpunkte um sicherzustellen dass diese nur von Administratoren genutzt werden können."
|
||||
},
|
||||
"zha": {
|
||||
"add_device": "Gerät hinzufügen",
|
||||
@@ -2515,16 +2463,6 @@
|
||||
"value": "Wert"
|
||||
},
|
||||
"description": "Zigbee Home Automation Netzwerkmanagement",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Konfiguration abgeschlossen",
|
||||
"CONFIGURED_status_text": "Initialisieren",
|
||||
"INITIALIZED": "Initialisierung abgeschlossen",
|
||||
"INITIALIZED_status_text": "Das Gerät ist einsatzbereit",
|
||||
"INTERVIEW_COMPLETE": "Interview abgeschlossen",
|
||||
"INTERVIEW_COMPLETE_status_text": "Konfigurieren",
|
||||
"PAIRED": "Gerät gefunden",
|
||||
"PAIRED_status_text": "Interview starten"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Zigbee Home Automation - Gerät"
|
||||
},
|
||||
@@ -2595,7 +2533,7 @@
|
||||
"configured_in_yaml": "Zonen, die über configuration.yaml konfiguriert wurden, können nicht über die Benutzeroberfläche bearbeitet werden.",
|
||||
"confirm_delete": "Möchtest du diesen Bereich wirklich löschen?",
|
||||
"create_zone": "Zone erstellen",
|
||||
"description": "Verwalte die Zonen, in denen du Personen folgen möchtest",
|
||||
"description": "Verwalte die Zonen, in denen du Personen folgen möchtest.",
|
||||
"detail": {
|
||||
"create": "Erstellen",
|
||||
"delete": "Löschen",
|
||||
@@ -2656,12 +2594,12 @@
|
||||
"add_to_group": "Zur Gruppe hinzufügen",
|
||||
"entities": "Entitäten dieses Knotens",
|
||||
"entity_info": "Entitätsinformationen",
|
||||
"exclude_entity": "Entität von Home Assistant ausschließen",
|
||||
"exclude_entity": "Schließe diese Entität vom Home Assistant aus",
|
||||
"group": "Gruppe",
|
||||
"header": "Z-Wave-Knotenverwaltung",
|
||||
"introduction": "Führe Z-Wave-Befehle aus, die einen einzelnen Knoten betreffen. Wähle einen Knoten aus, um eine Liste der verfügbaren Befehle anzuzeigen.",
|
||||
"max_associations": "Maximale Zuordnungen:",
|
||||
"node_group_associations": "Zuordnungen zu Kontengruppen",
|
||||
"max_associations": "Max Assoziationen:",
|
||||
"node_group_associations": "Knotengruppenzuordnungen",
|
||||
"node_protection": "Knotenschutz",
|
||||
"node_to_control": "Zu steuernder Knoten",
|
||||
"nodes": "Knoten",
|
||||
@@ -2756,8 +2694,8 @@
|
||||
"filter_attributes": "Attribute filtern",
|
||||
"filter_entities": "Entitäten filtern",
|
||||
"filter_states": "Zustände filtern",
|
||||
"last_changed": "Zuletzt geändert",
|
||||
"last_updated": "Zuletzt aktualisiert",
|
||||
"last_changed": "Letzte Änderung",
|
||||
"last_updated": "Letzte Aktualisierung",
|
||||
"more_info": "Mehr Info",
|
||||
"no_entities": "Keine Entitäten",
|
||||
"set_state": "Status setzen",
|
||||
@@ -2850,7 +2788,7 @@
|
||||
"editor": {
|
||||
"action-editor": {
|
||||
"actions": {
|
||||
"call-service": "Dienst aufrufen",
|
||||
"call-service": "Dienst ausführen",
|
||||
"default_action": "Standardaktion",
|
||||
"more-info": "Mehr Info",
|
||||
"navigate": "Navigieren",
|
||||
@@ -2865,11 +2803,11 @@
|
||||
"card": {
|
||||
"alarm-panel": {
|
||||
"available_states": "Verfügbare Zustände",
|
||||
"description": "Mit der Alarmzentralen-Karte kannst du integrierte Alarmzentralen scharfschalten oder deaktivieren.",
|
||||
"description": "Mit der Alarmzentralen-Karte kannst du die Integrationen Ihrer Alarmzentrale aktivieren und deaktivieren.",
|
||||
"name": "Alarmpanel"
|
||||
},
|
||||
"button": {
|
||||
"default_action_help": "Die Standardaktion hängt von den Funktionen der Entität ab: sie wird entweder umgeschaltet oder die weiteren Informationen werden angezeigt.",
|
||||
"default_action_help": "Die Standardaktion hängt von den Funktionen der Entität ab, sie wird entweder umgeschaltet oder die weiteren Informationen werden angezeigt.",
|
||||
"description": "Mit der Schaltflächen-Karte kannst du Schaltflächen hinzufügen, um Aufgaben auszuführen.",
|
||||
"name": "Schaltfläche"
|
||||
},
|
||||
@@ -2921,9 +2859,9 @@
|
||||
"last-changed": "Zuletzt geändert",
|
||||
"last-triggered": "Zuletzt ausgelöst",
|
||||
"last-updated": "Zuletzt aktualisiert",
|
||||
"none": "Keine Sekundärinformation",
|
||||
"none": "Keine Sekundärinformatrionen",
|
||||
"position": "Position",
|
||||
"tilt-position": "Neigung"
|
||||
"tilt-position": "Neigungsposition"
|
||||
},
|
||||
"show_header_toggle": "Schalter anzeigen?",
|
||||
"special_row": "spezielle Reihe",
|
||||
@@ -2934,7 +2872,7 @@
|
||||
"name": "Entität Filter"
|
||||
},
|
||||
"entity": {
|
||||
"description": "Mit der Entitätskarte erhältst du einen schnellen Überblick über den Status einer Entität.",
|
||||
"description": "Mit der Entitätskarte erhältst du einen schnellen Überblick über den Status Ihrer Entität.",
|
||||
"name": "Entität"
|
||||
},
|
||||
"gauge": {
|
||||
@@ -3016,7 +2954,7 @@
|
||||
"map": {
|
||||
"dark_mode": "Dunkler Modus?",
|
||||
"default_zoom": "Standard-Zoom",
|
||||
"description": "Mit der Map-Karte kannst du Objekte auf einer Landkarte anzeigen lassen.",
|
||||
"description": "Mit der Map-Karte kannst du Objekte auf einer Karte anzeigen lassen.",
|
||||
"geo_location_sources": "Geolocation-Quellen",
|
||||
"hours_to_show": "Zu zeigende Stunden",
|
||||
"name": "Karte",
|
||||
@@ -3032,7 +2970,7 @@
|
||||
"name": "Mediensteuerung"
|
||||
},
|
||||
"picture-elements": {
|
||||
"description": "Die Bilder-Karte ist eine der vielseitigsten Karten. Hier kannst du Symbole, Texte und sogar Dienste basierend auf Bildkoordinaten positionieren.",
|
||||
"description": "Die Bilder-Karte ist eine der vielseitigsten Arten von Karten. Mit den Karten kannst du Symbole, Text und sogar Dienste positionieren! Auf einem Bild basierend auf Koordinaten.",
|
||||
"name": "Picture Elements"
|
||||
},
|
||||
"picture-entity": {
|
||||
@@ -3130,7 +3068,7 @@
|
||||
"header_name": "{name} Konfiguration anzeigen",
|
||||
"move_left": "Ansicht nach links verschieben",
|
||||
"move_right": "Ansicht nach rechts verschieben",
|
||||
"tab_badges": "Plaketten",
|
||||
"tab_badges": "Abzeichen",
|
||||
"tab_settings": "Einstellungen",
|
||||
"tab_visibility": "Sichtbarkeit",
|
||||
"visibility": {
|
||||
@@ -3191,8 +3129,8 @@
|
||||
"para_sure": "Bist du dir sicher, dass du die Benutzeroberfläche selbst verwalten möchtest?",
|
||||
"save": "Kontrolle übernehmen",
|
||||
"yaml_config": "Um dir den Einstieg zu erleichtern, findest du hier die aktuelle Konfiguration dieses Dashboards:",
|
||||
"yaml_control": "Um die Kontrolle im YAML-Modus zu übernehmen, erstelle eine YAML-Datei mit dem Namen, den du in deiner Konfiguration für dieses Dashboard angegeben hast, oder mit der Standardeinstellung 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Du verwendest den YAML-Modus für dieses Dashboard. Dies bedeutet, dass du deine Lovelace-Konfiguration nicht über die Benutzeroberfläche ändern kannst. Wenn du dieses Dashboard über die Benutzeroberfläche verwalten möchtest, entferne \"mode: yaml\" aus Deiner Lovelace-Konfiguration in \"configuration.yaml\"."
|
||||
"yaml_control": "Um die Kontrolle im YAML-Modus zu übernehmen, erstelle eine YAML-Datei mit dem Namen, den du in Deiner Konfiguration für dieses Dashboard angegeben hast, oder mit der Standardeinstellung 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Du verwendest den YAML-Modus für dieses Dashboard. Dies bedeutet, dass Du Deine Lovelace-Konfiguration nicht über die Benutzeroberfläche ändern kannst. Wenn du dieses Dashboard über die Benutzeroberfläche verwalten möchtest, entferne \"mode: yaml\" aus Deiner Lovelace-Konfiguration in \"configuration.yaml\"."
|
||||
},
|
||||
"select_view": {
|
||||
"dashboard_label": "Dashboard",
|
||||
@@ -3212,7 +3150,7 @@
|
||||
},
|
||||
"view": {
|
||||
"panel_mode": {
|
||||
"description": "Hiermit wird die erste Karte in voller Breite angezeigt. Andere Karten und Marker in dieser Ansicht werden nicht angezeigt.",
|
||||
"description": "Dadurch wird die erste Karte in voller Breite angezeigt. Andere Karten und Marker in dieser Ansicht werden nicht angezeigt.",
|
||||
"title": "Panel-Modus?",
|
||||
"warning_multiple_cards": "Diese Ansicht enthält mehr als eine Karte, in einer Bedienfeldansicht kann jedoch nur eine Karte angezeigt werden."
|
||||
}
|
||||
@@ -3425,8 +3363,8 @@
|
||||
"intro": "Sind Sie bereit, dein Zuhause zu wecken, Ihre Privatsphäre zurückzugewinnen und einer weltweiten Gemeinschaft von Tüftlern beizutreten?",
|
||||
"restore": {
|
||||
"description": "Alternativ kannst du von einem vorherigen Snapshot wiederherstellen.",
|
||||
"hide_log": "Vollständiges Protokoll ausblenden",
|
||||
"in_progress": "Wiederherstellung im Gange",
|
||||
"hide_log": "Vollständiges Log verstecken",
|
||||
"in_progress": "Wiederherstellung im Prozess",
|
||||
"show_log": "Vollständiges Protokoll anzeigen"
|
||||
},
|
||||
"user": {
|
||||
@@ -3447,20 +3385,17 @@
|
||||
},
|
||||
"profile": {
|
||||
"advanced_mode": {
|
||||
"description": "Home Assistant verbirgt standardmäßig erweiterte Funktionen und Optionen. Mache diese Funktionen zugänglich, indem diese Option aktiviert wird. Dies ist eine benutzerspezifische Einstellung, die sich nicht auf andere Benutzer auswirkt, die Home Assistant verwenden.",
|
||||
"description": "Home Assistent verbirgt standardmäßig erweiterte Funktionen und Optionen. Mache diese Funktionen zugänglich, indem diese Option aktiviert wird. Dies ist eine benutzerspezifische Einstellung, die sich nicht auf andere Benutzer auswirkt, die Home Assistant verwenden.",
|
||||
"link_promo": "Mehr erfahren",
|
||||
"title": "Erweiterter Modus"
|
||||
},
|
||||
"change_password": {
|
||||
"confirm_new_password": "Neues Passwort Bestätigen",
|
||||
"current_password": "Aktuelles Passwort",
|
||||
"error_new_is_old": "Das neue Passwort muss sich von dem aktuellen Passwort unterscheiden.",
|
||||
"error_new_mismatch": "Eingegebene neue Passwörter stimmen nicht überein",
|
||||
"error_required": "Erforderlich",
|
||||
"header": "Passwort ändern",
|
||||
"new_password": "Neues Passwort",
|
||||
"submit": "Absenden",
|
||||
"success": "Passwort wurde erfolgreich geändert"
|
||||
"submit": "Absenden"
|
||||
},
|
||||
"current_user": "Du bist derzeit als {fullName} angemeldet.",
|
||||
"customize_sidebar": {
|
||||
@@ -3500,7 +3435,7 @@
|
||||
"description": "Erstelle langlebige Zugriffstoken, damit deine Skripte mit deiner Home Assistant-Instanz interagieren können. Jedes Token ist ab der Erstellung für 10 Jahre gültig. Die folgenden langlebigen Zugriffstoken sind derzeit aktiv.",
|
||||
"empty_state": "Sie haben noch keine langlebigen Zugangs-Token.",
|
||||
"header": "Langlebige Zugangs-Token",
|
||||
"last_used": "Zuletzt verwendet {date} von {location}",
|
||||
"last_used": "Zuletzt verwendet am {date} in {location}",
|
||||
"learn_auth_requests": "Erfahre, wie du authentifizierte Anfragen stellen kannst.",
|
||||
"name": "Name",
|
||||
"not_used": "Wurde noch nie benutzt",
|
||||
@@ -3523,7 +3458,7 @@
|
||||
"push_notifications": {
|
||||
"add_device_prompt": {
|
||||
"input_label": "Gerätename",
|
||||
"title": "Wie soll dieses Gerät genannt werden?"
|
||||
"title": "Wie sollte dieses Gerät genannt werden?"
|
||||
},
|
||||
"description": "Sende Benachrichtigungen an dieses Gerät.",
|
||||
"error_load_platform": "Konfiguriere notify.html5.",
|
||||
@@ -3539,7 +3474,7 @@
|
||||
"delete_failed": "Fehler beim Löschen das Aktualisierungs-Token.",
|
||||
"description": "Jedes Aktualisierungs-Token stellt eine Anmeldesitzung dar. Aktualisierungs-Token werden automatisch entfernt, wenn Sie Abmelden klicken. Die folgenden Aktualisierungs-Token sind derzeit für Ihr Konto aktiv.",
|
||||
"header": "Aktualisierungs-Tokens",
|
||||
"last_used": "Zuletzt verwendet {date} von {location}",
|
||||
"last_used": "Zuletzt verwendet am {date} in {location}",
|
||||
"not_used": "Wurde noch nie benutzt",
|
||||
"token_title": "Aktualisierungs-Token für {clientId}"
|
||||
},
|
||||
|
@@ -2,13 +2,11 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Παράμετρος διαμόρφωσης",
|
||||
"device": "Συσκευή",
|
||||
"integration": "Ενσωμάτωση",
|
||||
"user": "Χρήστης"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"owner": "Ιδιοκτήτης",
|
||||
"system-admin": "Διαχειριστές",
|
||||
"system-read-only": "Χρήστες μόνο για ανάγνωση",
|
||||
"system-users": "Χρήστες"
|
||||
@@ -547,15 +545,8 @@
|
||||
"add_new": "Προσθήκη νέας περιοχής...",
|
||||
"area": "Περιοχή",
|
||||
"clear": "Εκκαθάριση",
|
||||
"no_areas": "Δεν έχετε περιοχές",
|
||||
"no_match": "Δεν βρέθηκαν περιοχές που να ταιριάζουν",
|
||||
"show_areas": "Εμφάνιση περιοχών"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Προσθήκη χρήστη",
|
||||
"remove_user": "Κατάργηση χρήστη",
|
||||
"select_blueprint": "Επιλέξτε ένα σχεδιάγραμμα"
|
||||
},
|
||||
"data-table": {
|
||||
"no-data": "Δεν υπάρχουν δεδομένα",
|
||||
"search": "Αναζήτηση"
|
||||
@@ -569,8 +560,6 @@
|
||||
"clear": "Καθαρός",
|
||||
"device": "Συσκευή",
|
||||
"no_area": "Καμία περιοχή",
|
||||
"no_devices": "Δεν έχετε συσκευές",
|
||||
"no_match": "Δεν βρέθηκαν συσκευές που να ταιριάζουν",
|
||||
"show_devices": "Εμφάνιση συσκευών",
|
||||
"toggle": "Εναλλαγή"
|
||||
},
|
||||
@@ -582,7 +571,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Καθαρισμός",
|
||||
"entity": "Οντότητα",
|
||||
"no_match": "Δεν βρέθηκαν οντότητες που να ταιριάζουν",
|
||||
"show_entities": "Εμφάνιση οντοτήτων"
|
||||
}
|
||||
},
|
||||
@@ -599,8 +587,8 @@
|
||||
"changed_to_state": "άλλαξε σε {state}",
|
||||
"cleared_device_class": "παραγράφηκε (δεν εντοπίστηκε {device_class} )",
|
||||
"detected_device_class": "εντόπισε {device_class}",
|
||||
"rose": "ανέτειλε",
|
||||
"set": "έδυσε",
|
||||
"rose": "αυξήθηκε",
|
||||
"set": "ορίστηκε",
|
||||
"turned_off": "απενεργοποιήθηκε",
|
||||
"turned_on": "ενεργοποιήθηκε",
|
||||
"was_at_home": "ήταν στο σπίτι",
|
||||
@@ -716,16 +704,6 @@
|
||||
"service-picker": {
|
||||
"service": "Υπηρεσία"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Επιλέξτε περιοχή",
|
||||
"add_device_id": "Επιλέξτε συσκευή",
|
||||
"add_entity_id": "Διαλέξτε οντότητα",
|
||||
"expand_area_id": "Αναπτύξτε αυτήν την περιοχή στις ξεχωριστές συσκευές και οντότητες που περιέχει. Μετά την επέκταση δεν θα ενημερώσει τις συσκευές και τις οντότητες όταν αλλάζει η περιοχή.",
|
||||
"expand_device_id": "Αναπτύξτε αυτήν τη συσκευή σε ξεχωριστές οντότητες. Μετά την επέκταση, δεν θα ενημερώσει τις οντότητες όταν αλλάξει η συσκευή.",
|
||||
"remove_area_id": "Κατάργηση περιοχής",
|
||||
"remove_device_id": "Αφαίρεση συσκευής",
|
||||
"remove_entity_id": "Αφαίρεση οντότητας"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Προσθήκη χρήστη",
|
||||
"no_user": "Κανένας χρήστης",
|
||||
@@ -749,7 +727,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την καταχώριση;",
|
||||
"delete": "Διαγραφή",
|
||||
"device_disabled": "Η συσκευή αυτής της οντότητας είναι απενεργοποιημένη.",
|
||||
"enabled_cause": "Απενεργοποιήθηκε από {cause}.",
|
||||
"enabled_delay_confirm": "Τα ενεργοποιημένα στοιχεία θα προστεθούν στο Home Assistant σε {delay} δευτερόλεπτα",
|
||||
"enabled_description": "Οι απενεργοποιημένες οντότητες δεν θα προστεθούν στον Home Assistant.",
|
||||
@@ -760,7 +737,6 @@
|
||||
"icon_error": "Το εικονίδιο πρέπει να είναι στη μορφή 'πρόθεμα:όνομα_εικόνας', για παράδειγμα: 'mdi:home'",
|
||||
"name": "Όνομα",
|
||||
"note": "Σημείωση: Αυτό μπορεί να μην λειτουργεί ακόμη με όλες τις ενσωματώσεις.",
|
||||
"open_device_settings": "Άνοιγμα ρυθμίσεων συσκευής",
|
||||
"unavailable": "Αυτή η οντότητα δεν είναι προς το παρόν διαθέσιμη.",
|
||||
"update": "Ενημέρωση"
|
||||
},
|
||||
@@ -901,7 +877,6 @@
|
||||
"navigation": {
|
||||
"areas": "Περιοχές",
|
||||
"automation": "Αυτοματισμοί",
|
||||
"blueprint": "Σχεδιαγράμματα",
|
||||
"core": "Γενικά",
|
||||
"customize": "Μορφοποιήσεις",
|
||||
"devices": "Συσκευές",
|
||||
@@ -1071,20 +1046,6 @@
|
||||
"automation": {
|
||||
"caption": "Αυτοματισμοί",
|
||||
"description": "Διαχείριση αυτοματισμών",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Χρησιμοποιήστε ένα σχεδιάγραμμα"
|
||||
},
|
||||
"header": "Δημιουργία νέου αυτοματισμού",
|
||||
"how": "Πώς θέλετε να δημιουργήσετε τον νέο σας αυτοματισμό;",
|
||||
"start_empty": "Ξεκινήστε με έναν κενό αυτοματισμό",
|
||||
"thingtalk": {
|
||||
"create": "Δημιουργία",
|
||||
"header": "Περιγράψτε τον αυτοματισμό που θέλετε να δημιουργήσετε",
|
||||
"input_label": "Τι πρέπει να κάνει αυτός ο αυτοματισμός;",
|
||||
"intro": "Και θα προσπαθήσουμε να το δημιουργήσουμε για εσάς. Για παράδειγμα: Σβήσε τα φώτα όταν φεύγω."
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"actions": {
|
||||
"add": "Προσθήκη ενέργειας",
|
||||
@@ -1165,14 +1126,6 @@
|
||||
"unsupported_action": "Χωρίς υποστήριξη διεπαφής χρήστη για ενέργεια: {action}"
|
||||
},
|
||||
"alias": "Όνομα",
|
||||
"blueprint": {
|
||||
"blueprint_to_use": "Σχεδιάγραμμα για χρήση",
|
||||
"header": "Σχεδιάγραμμα",
|
||||
"inputs": "Είσοδοι",
|
||||
"manage_blueprints": "Διαχείριση σχεδιαγραμμάτων",
|
||||
"no_blueprints": "Δεν έχετε σχεδιαγράμματα",
|
||||
"no_inputs": "Αυτό το σχεδιάγραμμα δεν έχει καμία εισαγωγή."
|
||||
},
|
||||
"conditions": {
|
||||
"add": "Προσθήκη όρου",
|
||||
"delete": "Διαγραφή",
|
||||
@@ -1415,42 +1368,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "κοινοτικά φόρουμ",
|
||||
"error_no_url": "Εισαγάγετε τη διεύθυνση URL του σχεδιαγράμματος.",
|
||||
"file_name": "Διαδρομή σχεδιαγράμματος",
|
||||
"header": "Εισαγωγή σχεδιαγράμματος",
|
||||
"import_btn": "Προεπισκόπηση σχεδιαγράμματος",
|
||||
"import_header": "Σχεδιάγραμμα \"{name}\"",
|
||||
"import_introduction": "Μπορείτε να εισαγάγετε σχεδιαγράμματα άλλων χρηστών από το Github και τα φόρουμ της κοινότητας. Εισαγάγετε τη διεύθυνση URL του σχεδιαγράμματος παρακάτω.",
|
||||
"import_introduction_link": "Μπορείτε να εισαγάγετε σχεδιαγράμματα άλλων χρηστών από το Github και το {community_link} . Εισαγάγετε τη διεύθυνση URL του σχεδιαγράμματος παρακάτω.",
|
||||
"importing": "Φόρτωση σχεδιαγράμματος...",
|
||||
"raw_blueprint": "Περιεχόμενο σχεδιαγράμματος",
|
||||
"save_btn": "Εισαγωγή σχεδιαγράμματος",
|
||||
"saving": "Εισαγωγή σχεδιαγράμματος...",
|
||||
"unsupported_blueprint": "Αυτό το σχεδιάγραμμα δεν υποστηρίζεται",
|
||||
"url": "Διεύθυνση URL του σχεδιαγράμματος"
|
||||
},
|
||||
"caption": "Σχεδιαγράμματα",
|
||||
"description": "Διαχείριση σχεδιαγραμμάτων",
|
||||
"overview": {
|
||||
"add_blueprint": "Εισαγωγή σχεδιαγράμματος",
|
||||
"confirm_delete_header": "Διαγραφή αυτού του σχεδιαγράμματος;",
|
||||
"confirm_delete_text": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το σχεδιάγραμμα;",
|
||||
"delete_blueprint": "Διαγραφή σχεδιαγράμματος",
|
||||
"discover_more": "Ανακαλύψτε περισσότερα σχεδιαγράμματα",
|
||||
"header": "Πρόγραμμα επεξεργασίας σχεδιαγραμμάτων",
|
||||
"headers": {
|
||||
"domain": "Τομέας",
|
||||
"file_name": "Ονομα αρχείου",
|
||||
"name": "Όνομα"
|
||||
},
|
||||
"introduction": "Η διαμόρφωση του σχεδιαγράμματος σας επιτρέπει να εισάγετε και να διαχειρίζεστε τα σχεδιαγράμματά σας.",
|
||||
"learn_more": "Μάθετε περισσότερα σχετικά με τη χρήση σχεδιαγραμμάτων",
|
||||
"use_blueprint": "Δημιουργία αυτοματισμού"
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
"account": {
|
||||
"alexa": {
|
||||
@@ -1688,7 +1605,6 @@
|
||||
"unknown_condition": "Άγνωστη κατάσταση"
|
||||
},
|
||||
"create": "Δημιουργία αυτοματισμού με τη συσκευή",
|
||||
"create_disable": "Δεν είναι δυνατή η δημιουργία αυτοματισμού με απενεργοποιημένη συσκευή",
|
||||
"no_automations": "Δεν υπάρχουν αυτοματισμοί",
|
||||
"no_device_automations": "Δεν υπάρχουν διαθέσιμοι αυτοματισμοί για αυτήν τη συσκευή.",
|
||||
"triggers": {
|
||||
@@ -1717,15 +1633,6 @@
|
||||
"description": "Διαχείριση συνδεδεμένων συσκευών",
|
||||
"device_info": "Πληροφορίες συσκευής",
|
||||
"device_not_found": "Η συσκευή δε βρέθηκε.",
|
||||
"disabled": "Απενεργοποιημένο",
|
||||
"disabled_by": {
|
||||
"config_entry": "Παράμετρος διαμόρφωσης",
|
||||
"integration": "Ενσωμάτωση",
|
||||
"user": "Χρήστης"
|
||||
},
|
||||
"enabled_cause": "Η συσκευή απενεργοποιείται από το {cause}.",
|
||||
"enabled_description": "Οι απενεργοποιημένες συσκευές δεν θα εμφανίζονται και οι οντότητες που ανήκουν στη συσκευή θα απενεργοποιούνται και δεν θα προστίθενται στο Home Assistant.",
|
||||
"enabled_label": "Ενεργοποίηση συσκευής",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Προσθήκη στο Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {απενεργοποιημένη οντότηταy}\n other {απενεργοποιημένες οντότητες}\n}",
|
||||
@@ -1735,25 +1642,14 @@
|
||||
},
|
||||
"name": "Όνομα",
|
||||
"no_devices": "Δεν υπάρχουν συσκευές",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Φίλτρο",
|
||||
"hidden_devices": "{number} κρυφή {number, plural,\n one {συσκευή}\n other {συσκευές}\n}",
|
||||
"show_all": "Εμφάνιση όλων",
|
||||
"show_disabled": "Εμφάνιση απενεργοποιημένων συσκευών"
|
||||
},
|
||||
"search": "Αναζήτηση συσκευών"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Δημιουργία σκηνής με τη συσκευή",
|
||||
"create_disable": "Δεν είναι δυνατή η δημιουργία σκηνής με απενεργοποιημένη συσκευή",
|
||||
"no_scenes": "Καμία σκηνή",
|
||||
"scenes": "Σκηνές"
|
||||
},
|
||||
"scenes": "Σκηνές",
|
||||
"script": {
|
||||
"create": "Δημιουργία σεναρίου με συσκευή",
|
||||
"create_disable": "Δεν είναι δυνατή η δημιουργία σεναρίου με απενεργοποιημένη συσκευή",
|
||||
"no_scripts": "Χωρίς δέσμες ενεργειών",
|
||||
"scripts": "Δέσμες ενεργειών"
|
||||
},
|
||||
@@ -1786,7 +1682,6 @@
|
||||
},
|
||||
"header": "Μητρώο οντοτήτων",
|
||||
"headers": {
|
||||
"area": "Περιοχή",
|
||||
"entity_id": "Αναγνωριστικό οντότητας",
|
||||
"integration": "Ενσωμάτωση",
|
||||
"name": "Όνομα",
|
||||
@@ -2435,7 +2330,6 @@
|
||||
"editor": {
|
||||
"activate_user": "Ενεργοποίηση χρήστη",
|
||||
"active": "Ενεργό",
|
||||
"active_tooltip": "Ελέγχει εάν ο χρήστης μπορεί να συνδεθεί",
|
||||
"admin": "Διαχειριστής",
|
||||
"caption": "Προβολή χρήστη",
|
||||
"change_password": "Αλλαγή Κωδικού",
|
||||
@@ -2452,24 +2346,19 @@
|
||||
"system_generated_users_not_editable": "Δεν είναι δυνατή η ενημέρωση των χρηστών που δημιουργούνται από το σύστημα.",
|
||||
"system_generated_users_not_removable": "Δεν είναι δυνατή η διαγραφή χρηστών που δημιουργήθηκαν από το σύστημα",
|
||||
"unnamed_user": "Χρήστης χωρίς όνομα",
|
||||
"update_user": "Ενημέρωση",
|
||||
"username": "Όνομα χρήστη"
|
||||
"update_user": "Ενημέρωση"
|
||||
},
|
||||
"picker": {
|
||||
"add_user": "Προσθήκη χρήστη",
|
||||
"headers": {
|
||||
"group": "Ομάδα",
|
||||
"is_active": "Ενεργό",
|
||||
"is_owner": "Ιδιοκτήτης",
|
||||
"name": "Ονομασία",
|
||||
"system": "Σύστημα",
|
||||
"username": "Όνομα χρήστη"
|
||||
"system": "Σύστημα"
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "Η ομάδα χρηστών είναι ένα έργο σε εξέλιξη. Ο χρήστης δεν θα μπορεί να διαχειριστεί την παρουσία μέσω της διεπαφής χρήστη. Εξακολουθούμε να ελέγχουμε όλα τα τελικά σημεία API διαχείρισης για να διασφαλίσουμε ότι περιορίζουν σωστά την πρόσβαση στους διαχειριστές."
|
||||
},
|
||||
"zha": {
|
||||
"add_device": "Προσθήκη συσκευής",
|
||||
"add_device_page": {
|
||||
"discovered_text": "Οι συσκευές θα εμφανιστούν εδώ μόλις ανακαλυφθούν.",
|
||||
"discovery_text": "Οι ανακαλυφθείσες συσκευές θα εμφανιστούν εδώ. Ακολουθήστε τις οδηγίες για τις συσκευές σας και τοποθετήστε τις συσκευές στη λειτουργία αντιστοίχισης.",
|
||||
@@ -2515,16 +2404,6 @@
|
||||
"value": "Τιμή"
|
||||
},
|
||||
"description": "Διαχείριση του δικτύου Zigbee Home Automation",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Η διαμόρφωση ολοκληρώθηκε",
|
||||
"CONFIGURED_status_text": "Αρχικοποίηση",
|
||||
"INITIALIZED": "Η προετοιμασία ολοκληρώθηκε",
|
||||
"INITIALIZED_status_text": "Η συσκευή είναι έτοιμη για χρήση",
|
||||
"INTERVIEW_COMPLETE": "Η συνέντευξη ολοκληρώθηκε",
|
||||
"INTERVIEW_COMPLETE_status_text": "Διαμόρφωση",
|
||||
"PAIRED": "Βρέθηκε συσκευή",
|
||||
"PAIRED_status_text": "Έναρξη συνέντευξης"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Zigbee Home Automation - Συσκευή"
|
||||
},
|
||||
@@ -2540,7 +2419,6 @@
|
||||
"unbind_button_label": "Αποσύνδεση ομάδας"
|
||||
},
|
||||
"groups": {
|
||||
"add_group": "Προσθήκη ομάδας",
|
||||
"add_members": "Προσθήκη Μελών",
|
||||
"adding_members": "Προσθήκη Μελών",
|
||||
"caption": "Ομάδες",
|
||||
@@ -2583,11 +2461,7 @@
|
||||
"hint_wakeup": "Μερικές συσκευές όπως οι αισθητήρες Xiaomi έχουν ένα κουμπί αφύπνισης το οποίο μπορείτε να πιέσετε για διαστήματα των ~5 δευτερολέπτων ώστε να κρατήσετε τις συσκευές αφυπνισμένες ενώ αλληλεπιδράτε μαζί τους.",
|
||||
"introduction": "Εκτελέστε εντολές ZHA που επηρεάζουν μια μόνο συσκευή. Επιλέξτε μια συσκευή για να δείτε μια λίστα διαθέσιμων εντολών."
|
||||
},
|
||||
"title": "Οικιακός Αυτοματισμός Zigbee",
|
||||
"visualization": {
|
||||
"caption": "Απεικόνιση",
|
||||
"header": "Απεικόνιση δικτύου"
|
||||
}
|
||||
"title": "Οικιακός Αυτοματισμός Zigbee"
|
||||
},
|
||||
"zone": {
|
||||
"add_zone": "Προσθήκη ζώνης",
|
||||
@@ -3041,8 +2915,7 @@
|
||||
},
|
||||
"picture-glance": {
|
||||
"description": "Η κάρτα \"Ματιά εικόνας\" εμφανίζει μια εικόνα και τις αντίστοιχες καταστάσεις οντότητας ως εικονίδιο. Οι οντότητες στη δεξιά πλευρά επιτρέπουν ενέργειες εναλλαγής, ενώ άλλες εμφανίζουν το παράθυρο διαλόγου περισσότερων πληροφοριών.",
|
||||
"name": "Στιγμιότυπο εικόνας",
|
||||
"state_entity": "Κρατική οντότητα"
|
||||
"name": "Στιγμιότυπο εικόνας"
|
||||
},
|
||||
"picture": {
|
||||
"description": "Η κάρτα Εικόνας σάς επιτρέπει να ορίσετε μια εικόνα που θα χρησιμοποιείται για πλοήγηση σε διάφορες διαδρομές στη διεπαφή σας ή να καλείτε μια υπηρεσία.",
|
||||
@@ -3454,13 +3327,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Επιβεβαιώστε τον καινούριο κωδικό",
|
||||
"current_password": "Τρέχων κωδικός",
|
||||
"error_new_is_old": "Ο νέος κωδικός πρόσβασης πρέπει να είναι διαφορετικός από τον τρέχοντα κωδικό πρόσβασης",
|
||||
"error_new_mismatch": "Οι νέες τιμές κωδικού πρόσβασης που έχουν εισαχθεί δεν ταιριάζουν",
|
||||
"error_required": "Απαιτείται",
|
||||
"header": "Αλλαγή Κωδικού",
|
||||
"new_password": "Νέος κωδικός",
|
||||
"submit": "Υποβολή",
|
||||
"success": "Ο κωδικός άλλαξε επιτυχώς"
|
||||
"submit": "Υποβολή"
|
||||
},
|
||||
"current_user": "Αυτήν τη στιγμή είστε συνδεδεμένος ως {fullName}.",
|
||||
"customize_sidebar": {
|
||||
|
@@ -2,7 +2,6 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Config Entry",
|
||||
"device": "Device",
|
||||
"integration": "Integration",
|
||||
"user": "User"
|
||||
}
|
||||
@@ -547,8 +546,6 @@
|
||||
"add_new": "Add new area…",
|
||||
"area": "Area",
|
||||
"clear": "Clear",
|
||||
"no_areas": "You don't have any areas",
|
||||
"no_match": "No matching areas found",
|
||||
"show_areas": "Show areas"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
@@ -569,8 +566,6 @@
|
||||
"clear": "Clear",
|
||||
"device": "Device",
|
||||
"no_area": "No area",
|
||||
"no_devices": "You don't have any devices",
|
||||
"no_match": "No matching devices found",
|
||||
"show_devices": "Show devices",
|
||||
"toggle": "Toggle"
|
||||
},
|
||||
@@ -582,7 +577,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Clear",
|
||||
"entity": "Entity",
|
||||
"no_match": "No matching entities found",
|
||||
"show_entities": "Show entities"
|
||||
}
|
||||
},
|
||||
@@ -716,16 +710,6 @@
|
||||
"service-picker": {
|
||||
"service": "Service"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Pick area",
|
||||
"add_device_id": "Pick device",
|
||||
"add_entity_id": "Pick entity",
|
||||
"expand_area_id": "Expand this area in the seperate devices and entities that it contains. After expanding it will not update the devices and entities when the area changes.",
|
||||
"expand_device_id": "Expand this device in seperate entities. After expanding it will not update the entities when the device changes.",
|
||||
"remove_area_id": "Remove area",
|
||||
"remove_device_id": "Remove device",
|
||||
"remove_entity_id": "Remove entity"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Add user",
|
||||
"no_user": "No user",
|
||||
@@ -749,7 +733,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Are you sure you want to delete this entry?",
|
||||
"delete": "Delete",
|
||||
"device_disabled": "The device of this entity is disabled.",
|
||||
"enabled_cause": "Disabled by {cause}.",
|
||||
"enabled_delay_confirm": "The enabled entities will be added to Home Assistant in {delay} seconds",
|
||||
"enabled_description": "Disabled entities will not be added to Home Assistant.",
|
||||
@@ -760,7 +743,6 @@
|
||||
"icon_error": "Icons should be in the format 'prefix:iconname', e.g. 'mdi:home'",
|
||||
"name": "Name",
|
||||
"note": "Note: This might not work yet with all integrations.",
|
||||
"open_device_settings": "Open device settings",
|
||||
"unavailable": "This entity is not currently available.",
|
||||
"update": "Update"
|
||||
},
|
||||
@@ -1048,7 +1030,7 @@
|
||||
"confirmation_text": "All devices in this area will become unassigned.",
|
||||
"confirmation_title": "Are you sure you want to delete this area?"
|
||||
},
|
||||
"description": "Group devices and entities into areas",
|
||||
"description": "Manage areas in your home",
|
||||
"editor": {
|
||||
"area_id": "Area ID",
|
||||
"create": "Create",
|
||||
@@ -1070,7 +1052,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automations",
|
||||
"description": "Create custom behavior rules for your home",
|
||||
"description": "Manage automations",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Use a blueprint"
|
||||
@@ -1258,7 +1240,7 @@
|
||||
"edit_ui": "Edit with UI",
|
||||
"edit_yaml": "Edit as YAML",
|
||||
"enable_disable": "Enable/Disable automation",
|
||||
"introduction": "Use automations to bring your home to life.",
|
||||
"introduction": "Use automations to bring your home to live.",
|
||||
"load_error_not_editable": "Only automations in automations.yaml are editable.",
|
||||
"load_error_unknown": "Error loading automation ({err_no}).",
|
||||
"max": {
|
||||
@@ -1417,18 +1399,16 @@
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "community forums",
|
||||
"error_no_url": "Please enter the URL of the blueprint.",
|
||||
"file_name": "Blueprint Path",
|
||||
"header": "Import a blueprint",
|
||||
"import_btn": "Preview blueprint",
|
||||
"import_header": "Blueprint \"{name}\"",
|
||||
"file_name": "Local blueprint file name",
|
||||
"header": "Add new blueprint",
|
||||
"import_btn": "Import blueprint",
|
||||
"import_header": "Import \"{name}\" (type: {domain})",
|
||||
"import_introduction": "You can import blueprints of other users from Github and the community forums. Enter the URL of the blueprint below.",
|
||||
"import_introduction_link": "You can import blueprints of other users from Github and the {community_link}. Enter the URL of the blueprint below.",
|
||||
"importing": "Loading blueprint...",
|
||||
"importing": "Importing blueprint...",
|
||||
"raw_blueprint": "Blueprint content",
|
||||
"save_btn": "Import blueprint",
|
||||
"saving": "Importing blueprint...",
|
||||
"save_btn": "Save blueprint",
|
||||
"saving": "Saving blueprint...",
|
||||
"unsupported_blueprint": "This blueprint is not supported",
|
||||
"url": "URL of the blueprint"
|
||||
},
|
||||
@@ -1439,15 +1419,14 @@
|
||||
"confirm_delete_header": "Delete this blueprint?",
|
||||
"confirm_delete_text": "Are you sure you want to delete this blueprint?",
|
||||
"delete_blueprint": "Delete blueprint",
|
||||
"discover_more": "Discover more Blueprints",
|
||||
"header": "Blueprint Editor",
|
||||
"headers": {
|
||||
"domain": "Domain",
|
||||
"file_name": "File name",
|
||||
"name": "Name"
|
||||
},
|
||||
"introduction": "The blueprint configuration allows you to import and manage your blueprints.",
|
||||
"learn_more": "Learn more about using blueprints",
|
||||
"introduction": "The blueprint editor allows you to create and edit blueprints.",
|
||||
"learn_more": "Learn more about blueprints",
|
||||
"use_blueprint": "Create automation"
|
||||
}
|
||||
},
|
||||
@@ -1531,7 +1510,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_features": "Control home when away and integrate with Alexa and Google Assistant",
|
||||
"description_features": "Control away from home, integrate with Alexa and Google Assistant.",
|
||||
"description_login": "Logged in as {email}",
|
||||
"description_not_login": "Not logged in",
|
||||
"dialog_certificate": {
|
||||
@@ -1626,7 +1605,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "General",
|
||||
"description": "Unit system, location, time zone & other general parameters",
|
||||
"description": "Change your general Home Assistant configuration",
|
||||
"section": {
|
||||
"core": {
|
||||
"core_config": {
|
||||
@@ -1688,7 +1667,6 @@
|
||||
"unknown_condition": "Unknown condition"
|
||||
},
|
||||
"create": "Create automation with device",
|
||||
"create_disable": "Can't create automation with disabled device",
|
||||
"no_automations": "No automations",
|
||||
"no_device_automations": "There are no automations available for this device.",
|
||||
"triggers": {
|
||||
@@ -1714,18 +1692,9 @@
|
||||
"no_devices": "No devices"
|
||||
},
|
||||
"delete": "Delete",
|
||||
"description": "Manage configured devices",
|
||||
"description": "Manage connected devices",
|
||||
"device_info": "Device info",
|
||||
"device_not_found": "Device not found.",
|
||||
"disabled": "Disabled",
|
||||
"disabled_by": {
|
||||
"config_entry": "Config Entry",
|
||||
"integration": "Integration",
|
||||
"user": "User"
|
||||
},
|
||||
"enabled_cause": "The device is disabled by {cause}.",
|
||||
"enabled_description": "Disabled devices will not be shown and entities belonging to the device will be disabled and not added to Home Assistant.",
|
||||
"enabled_label": "Enable device",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Add to Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}",
|
||||
@@ -1735,25 +1704,14 @@
|
||||
},
|
||||
"name": "Name",
|
||||
"no_devices": "No devices",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filter",
|
||||
"hidden_devices": "{number} hidden {number, plural,\n one {device}\n other {devices}\n}",
|
||||
"show_all": "Show all",
|
||||
"show_disabled": "Show disabled devices"
|
||||
},
|
||||
"search": "Search devices"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Create scene with device",
|
||||
"create_disable": "Can't create scene with disabled device",
|
||||
"no_scenes": "No scenes",
|
||||
"scenes": "Scenes"
|
||||
},
|
||||
"scenes": "Scenes",
|
||||
"script": {
|
||||
"create": "Create script with device",
|
||||
"create_disable": "Can't create script with disabled device",
|
||||
"no_scripts": "No scripts",
|
||||
"scripts": "Scripts"
|
||||
},
|
||||
@@ -1819,7 +1777,7 @@
|
||||
"header": "Configure Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Helpers",
|
||||
"description": "Elements that help build automations",
|
||||
"description": "Manage elements that help build automations",
|
||||
"dialog": {
|
||||
"add_helper": "Add helper",
|
||||
"add_platform": "Add {platform}",
|
||||
@@ -1851,7 +1809,7 @@
|
||||
"copy_github": "For GitHub",
|
||||
"copy_raw": "Raw Text",
|
||||
"custom_uis": "Custom UIs:",
|
||||
"description": "Version, system health and links to documentation",
|
||||
"description": "View info about your Home Assistant installation",
|
||||
"developed_by": "Developed by a bunch of awesome people.",
|
||||
"documentation": "Documentation",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1957,7 +1915,7 @@
|
||||
},
|
||||
"configure": "Configure",
|
||||
"configured": "Configured",
|
||||
"description": "Manage integrations with services, devices, ...",
|
||||
"description": "Manage integrations",
|
||||
"details": "Integration details",
|
||||
"discovered": "Discovered",
|
||||
"home_assistant_website": "Home Assistant website",
|
||||
@@ -2042,7 +2000,7 @@
|
||||
"open": "Open"
|
||||
}
|
||||
},
|
||||
"description": "Create customized sets of cards to control your home",
|
||||
"description": "Manage your Lovelace Dashboards",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "You are using Lovelace in YAML mode, therefore you cannot manage your resources through the UI. Manage them in configuration.yaml.",
|
||||
"caption": "Resources",
|
||||
@@ -2241,7 +2199,7 @@
|
||||
"scene": {
|
||||
"activated": "Activated scene {name}.",
|
||||
"caption": "Scenes",
|
||||
"description": "Capture device states and easily recall them later",
|
||||
"description": "Manage scenes",
|
||||
"editor": {
|
||||
"default_name": "New Scene",
|
||||
"devices": {
|
||||
@@ -2285,7 +2243,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Scripts",
|
||||
"description": "Execute a sequence of actions",
|
||||
"description": "Manage scripts",
|
||||
"editor": {
|
||||
"alias": "Name",
|
||||
"default_name": "New Script",
|
||||
@@ -2396,7 +2354,7 @@
|
||||
"confirm_remove": "Are you sure you want to remove tag {tag}?",
|
||||
"confirm_remove_title": "Remove tag?",
|
||||
"create_automation": "Create automation with tag",
|
||||
"description": "Trigger automations when a NFC tag, QR code, etc. is scanned",
|
||||
"description": "Manage tags",
|
||||
"detail": {
|
||||
"companion_apps": "companion apps",
|
||||
"create": "Create",
|
||||
@@ -2431,11 +2389,10 @@
|
||||
"username": "Username"
|
||||
},
|
||||
"caption": "Users",
|
||||
"description": "Manage the Home Assistant user accounts",
|
||||
"description": "Manage users",
|
||||
"editor": {
|
||||
"activate_user": "Activate user",
|
||||
"active": "Active",
|
||||
"active_tooltip": "Controls if user can login",
|
||||
"admin": "Administrator",
|
||||
"caption": "View user",
|
||||
"change_password": "Change password",
|
||||
@@ -3454,13 +3411,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Confirm New Password",
|
||||
"current_password": "Current Password",
|
||||
"error_new_is_old": "New password must be different than current password",
|
||||
"error_new_mismatch": "Entered new password values do not match",
|
||||
"error_required": "Required",
|
||||
"header": "Change Password",
|
||||
"new_password": "New Password",
|
||||
"submit": "Submit",
|
||||
"success": "Password changed successfully"
|
||||
"submit": "Submit"
|
||||
},
|
||||
"current_user": "You are currently logged in as {fullName}.",
|
||||
"customize_sidebar": {
|
||||
|
@@ -666,16 +666,6 @@
|
||||
"service-picker": {
|
||||
"service": "Servicio"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Seleccionar área",
|
||||
"add_device_id": "Seleccionar dispositivo",
|
||||
"add_entity_id": "Seleccionar entidad",
|
||||
"expand_area_id": "Expanda esta área en los dispositivos y entidades independientes que contiene. Después de expandirlo no actualizará los dispositivos y entidades cuando cambie el área.",
|
||||
"expand_device_id": "Expanda este dispositivo en entidades independientes. Después de expandirlo no actualizará las entidades cuando cambie el dispositivo.",
|
||||
"remove_area_id": "Eliminar área",
|
||||
"remove_device_id": "Eliminar dispositivo",
|
||||
"remove_entity_id": "Eliminar entidad"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Agregar usuario",
|
||||
"no_user": "Sin usuario",
|
||||
@@ -699,7 +689,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "¿Está seguro de que desea eliminar esta entrada?",
|
||||
"delete": "Eliminar",
|
||||
"device_disabled": "El dispositivo de esta entidad está deshabilitado.",
|
||||
"enabled_cause": "Deshabilitado por {cause}.",
|
||||
"enabled_delay_confirm": "Las entidades habilitadas se agregarán a Home Assistant en {delay} segundos",
|
||||
"enabled_description": "Las entidades deshabilitadas no serán agregadas a Home Assistant.",
|
||||
@@ -710,7 +699,6 @@
|
||||
"icon_error": "Los iconos deben estar en el formato 'prefijo:nombre del icono', por ejemplo, 'mdi: home'",
|
||||
"name": "Sustituir nombre",
|
||||
"note": "Nota: esto podría no funcionar todavía con todas las integraciones.",
|
||||
"open_device_settings": "Abrir la configuración del dispositivo",
|
||||
"unavailable": "Esta entidad no está disponible actualmente.",
|
||||
"update": "Actualizar"
|
||||
},
|
||||
@@ -1501,7 +1489,6 @@
|
||||
"unknown_condition": "Condición desconocida"
|
||||
},
|
||||
"create": "Crear automatización con dispositivo",
|
||||
"create_disable": "No se puede crear automatización con un dispositivo deshabilitado",
|
||||
"no_automations": "Sin automatizaciones",
|
||||
"no_device_automations": "No hay automatizaciones disponibles para este dispositivo.",
|
||||
"triggers": {
|
||||
@@ -1528,14 +1515,6 @@
|
||||
"description": "Administrar dispositivos conectados",
|
||||
"device_info": "Información del dispositivo",
|
||||
"device_not_found": "Dispositivo no encontrado.",
|
||||
"disabled": "Deshabilitado",
|
||||
"disabled_by": {
|
||||
"config_entry": "Entrada de configuración",
|
||||
"integration": "Integración",
|
||||
"user": "Usuario"
|
||||
},
|
||||
"enabled_description": "Los dispositivos deshabilitados no se mostrarán y las entidades que pertenecen al dispositivo se deshabilitarán y no se agregarán a Home Assistant.",
|
||||
"enabled_label": "Habilitar dispositivo",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Agregar a Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {entidad deshabilitada}\n other {entidades deshabilitadas}\n}",
|
||||
@@ -1545,24 +1524,14 @@
|
||||
},
|
||||
"name": "Nombre",
|
||||
"no_devices": "Sin dispositivos",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtrar",
|
||||
"show_all": "Mostrar todo",
|
||||
"show_disabled": "Mostrar los dispositivos deshabilitadas"
|
||||
},
|
||||
"search": "Mostrar dispositivos"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Crear escena con dispositivo",
|
||||
"create_disable": "No se puede crear una escena con un dispositivo deshabilitado",
|
||||
"no_scenes": "Sin escenas",
|
||||
"scenes": "Escenas"
|
||||
},
|
||||
"scenes": "Escenas",
|
||||
"script": {
|
||||
"create": "Crear script con dispositivo",
|
||||
"create_disable": "No se puede crear un script con un dispositivo deshabilitado",
|
||||
"no_scripts": "Sin scripts",
|
||||
"scripts": "Scripts"
|
||||
},
|
||||
@@ -2199,7 +2168,6 @@
|
||||
"editor": {
|
||||
"activate_user": "Activar usuario",
|
||||
"active": "Activo",
|
||||
"active_tooltip": "Controla si el usuario puede iniciar sesión",
|
||||
"admin": "Administrador",
|
||||
"caption": "Ver usuario",
|
||||
"change_password": "Cambiar contraseña",
|
||||
@@ -3168,13 +3136,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Confirmar nueva contraseña",
|
||||
"current_password": "Contraseña actual",
|
||||
"error_new_is_old": "La nueva contraseña debe ser diferente a la contraseña actual",
|
||||
"error_new_mismatch": "Las contraseñas no coinciden",
|
||||
"error_required": "Necesario",
|
||||
"header": "Cambiar contraseña",
|
||||
"new_password": "Nueva contraseña",
|
||||
"submit": "Enviar",
|
||||
"success": "La contraseña se cambió con éxito"
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"current_user": "Actualmente estás conectado como {fullName} .",
|
||||
"customize_sidebar": {
|
||||
|
@@ -2,7 +2,6 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Entrada de configuración",
|
||||
"device": "Dispositivo",
|
||||
"integration": "Integración",
|
||||
"user": "Usuario"
|
||||
}
|
||||
@@ -547,8 +546,6 @@
|
||||
"add_new": "Añade una nueva área ...",
|
||||
"area": "Área",
|
||||
"clear": "Limpiar",
|
||||
"no_areas": "No tienes áreas",
|
||||
"no_match": "No se han encontrado áreas coincidentes",
|
||||
"show_areas": "Mostrar áreas"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
@@ -569,8 +566,6 @@
|
||||
"clear": "Limpiar",
|
||||
"device": "Dispositivo",
|
||||
"no_area": "Ningún área",
|
||||
"no_devices": "No tienes ningún dispositivo",
|
||||
"no_match": "No se han encontrado dispositivos coincidentes",
|
||||
"show_devices": "Mostrar dispositivos",
|
||||
"toggle": "Interruptor"
|
||||
},
|
||||
@@ -582,7 +577,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Limpiar",
|
||||
"entity": "Entidad",
|
||||
"no_match": "No se han encontrado entidades coincidentes",
|
||||
"show_entities": "Mostrar entidades"
|
||||
}
|
||||
},
|
||||
@@ -706,26 +700,16 @@
|
||||
"never": "Nunca",
|
||||
"past": "Hace {time}",
|
||||
"past_duration": {
|
||||
"day": "Hace {count} {count, plural,\none {día}\nother {días}\n}",
|
||||
"hour": "Hace {count} {count, plural,\none {hora}\nother {horas}\n}",
|
||||
"minute": "Hace {count} {count, plural,\none {minuto}\nother {minutos}\n}",
|
||||
"second": "Hace {count} {count, plural,\none {segundo}\nother {segundos}\n}",
|
||||
"day": "hace {count} {count, plural,\none {día}\nother {días}\n}",
|
||||
"hour": "hace {count} {count, plural,\none {hora}\nother {horas}\n}",
|
||||
"minute": "hace {count} {count, plural,\none {minuto}\nother {minutos}\n}",
|
||||
"second": "hace {count} {count, plural,\none {segundo}\nother {segundos}\n}",
|
||||
"week": "hace {count} {count, plural,\none {semana}\nother {semanas}\n}"
|
||||
}
|
||||
},
|
||||
"service-picker": {
|
||||
"service": "Servicio"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Seleccionar área",
|
||||
"add_device_id": "Seleccionar dispositivo",
|
||||
"add_entity_id": "Seleccionar entidad",
|
||||
"expand_area_id": "Expande este área en los dispositivos y entidades independientes que contiene. Después de expandirse, no actualizará los dispositivos y entidades cuando cambie el área.",
|
||||
"expand_device_id": "Expande este dispositivo en entidades separadas. Después de expandirse, no actualizará las entidades cuando cambie el dispositivo.",
|
||||
"remove_area_id": "Eliminar área",
|
||||
"remove_device_id": "Eliminar dispositivo",
|
||||
"remove_entity_id": "Eliminar entidad"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Añadir usuario",
|
||||
"no_user": "Sin usuario",
|
||||
@@ -749,7 +733,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "¿Estás seguro de que quieres eliminar este elemento?",
|
||||
"delete": "Eliminar",
|
||||
"device_disabled": "El dispositivo de esta entidad está deshabilitado.",
|
||||
"enabled_cause": "Desactivado por {cause}.",
|
||||
"enabled_delay_confirm": "Las entidades habilitadas se agregarán a Home Assistant en {delay} segundos",
|
||||
"enabled_description": "Las entidades deshabilitadas no se agregarán a Home Assistant.",
|
||||
@@ -760,7 +743,6 @@
|
||||
"icon_error": "Los iconos deben tener el formato 'prefijo:nombreicono', por ejemplo, 'mdi:home'",
|
||||
"name": "Nombre",
|
||||
"note": "Nota: puede que esto no funcione todavía con todas las integraciones",
|
||||
"open_device_settings": "Abrir la configuración del dispositivo",
|
||||
"unavailable": "Esta entidad no está disponible actualmente.",
|
||||
"update": "Actualizar"
|
||||
},
|
||||
@@ -1048,7 +1030,7 @@
|
||||
"confirmation_text": "Todos los dispositivos en esta área quedarán sin asignar.",
|
||||
"confirmation_title": "¿Estás seguro de que deseas eliminar esta área?"
|
||||
},
|
||||
"description": "Agrupa dispositivos y entidades en áreas",
|
||||
"description": "Administra áreas en tu hogar",
|
||||
"editor": {
|
||||
"area_id": "ID de área",
|
||||
"create": "Crear",
|
||||
@@ -1070,7 +1052,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automatizaciones",
|
||||
"description": "Crea reglas de comportamiento personalizadas para tu hogar",
|
||||
"description": "Administra las automatizaciones",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Usa un plano"
|
||||
@@ -1093,7 +1075,7 @@
|
||||
"duplicate": "Duplicar",
|
||||
"header": "Acciones",
|
||||
"introduction": "Las acciones son lo que hará Home Assistant cuando se desencadene la automatización.",
|
||||
"learn_more": "Aprende más sobre las acciones.",
|
||||
"learn_more": "Saber más sobre las acciones.",
|
||||
"name": "Acción",
|
||||
"type_select": "Tipo de acción",
|
||||
"type": {
|
||||
@@ -1169,7 +1151,7 @@
|
||||
"blueprint_to_use": "Plano a usar",
|
||||
"header": "Plano",
|
||||
"inputs": "Entradas",
|
||||
"manage_blueprints": "Administra los planos",
|
||||
"manage_blueprints": "Administrar planos",
|
||||
"no_blueprints": "No tienes ningún plano",
|
||||
"no_inputs": "Este plano no tiene ninguna entrada."
|
||||
},
|
||||
@@ -1180,7 +1162,7 @@
|
||||
"duplicate": "Duplicar",
|
||||
"header": "Condiciones",
|
||||
"introduction": "Las condiciones son opcionales e impedirán cualquier\nejecución posterior a menos que se cumplan todas las condiciones.",
|
||||
"learn_more": "Aprende más sobre las condiciones",
|
||||
"learn_more": "Saber más sobre las condiciones",
|
||||
"name": "Condición",
|
||||
"type_select": "Tipo de condición",
|
||||
"type": {
|
||||
@@ -1284,7 +1266,7 @@
|
||||
"duplicate": "Duplicar",
|
||||
"header": "Desencadenantes",
|
||||
"introduction": "Los desencadenantes son los que inician el funcionamiento de una regla de automatización. Es posible especificar varios desencadenantes para la misma regla. Una vez que se inicia un desencadenante, Home Assistant comprobará las condiciones, si las hubiere, y ejecutará la acción.",
|
||||
"learn_more": "Aprende más sobre los desencadenantes",
|
||||
"learn_more": "Saber más sobre los desencadenantes",
|
||||
"name": "Desencadenante",
|
||||
"type_select": "Tipo de desencadenante",
|
||||
"type": {
|
||||
@@ -1392,7 +1374,7 @@
|
||||
"name": "Nombre"
|
||||
},
|
||||
"introduction": "El editor de automatización te permite crear y editar automatizaciones. En el enlace siguiente puedes leer las instrucciones para asegurarte de que has configurado correctamente Home Assistant.",
|
||||
"learn_more": "Aprende más sobre las automatizaciones",
|
||||
"learn_more": "Saber más sobre las automatizaciones",
|
||||
"no_automations": "No pudimos encontrar ninguna automatización editable",
|
||||
"only_editable": "Solo las automatizaciones definidas en automations.yaml son editables.",
|
||||
"pick_automation": "Elije la automatización para editar",
|
||||
@@ -1417,37 +1399,34 @@
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "foros de la comunidad",
|
||||
"error_no_url": "Por favor, introduce la URL del plano.",
|
||||
"file_name": "Ruta del plano",
|
||||
"header": "Importar un plano",
|
||||
"import_btn": "Vista previa del plano",
|
||||
"import_header": "Plano \"{name}\"",
|
||||
"file_name": "Nombre de archivo del plano local",
|
||||
"header": "Añadir nuevo plano",
|
||||
"import_btn": "Importar plano",
|
||||
"import_header": "Importar {name} (tipo: {domain})",
|
||||
"import_introduction": "Puedes importar planos de otros usuarios desde Github y los foros de la comunidad. Introduce la URL del plano a continuación.",
|
||||
"import_introduction_link": "Puedes importar planos de otros usuarios desde Github y {community_link}. Introduce la URL del plano a continuación.",
|
||||
"importing": "Cargando plano...",
|
||||
"importing": "Importando plano...",
|
||||
"raw_blueprint": "Contenido del plano",
|
||||
"save_btn": "Importar plano",
|
||||
"saving": "Importando plano...",
|
||||
"save_btn": "Guardar plano",
|
||||
"saving": "Guardando plano...",
|
||||
"unsupported_blueprint": "Este plano no es compatible",
|
||||
"url": "URL del plano"
|
||||
},
|
||||
"caption": "Planos",
|
||||
"description": "Administra los planos",
|
||||
"description": "Administrar planos",
|
||||
"overview": {
|
||||
"add_blueprint": "Importar plano",
|
||||
"confirm_delete_header": "¿Eliminar este plano?",
|
||||
"confirm_delete_text": "¿Estás seguro de que quieres borrar este plano?",
|
||||
"delete_blueprint": "Eliminar plano",
|
||||
"discover_more": "Descubre más planos",
|
||||
"header": "Editor de planos",
|
||||
"headers": {
|
||||
"domain": "Dominio",
|
||||
"file_name": "Nombre de archivo",
|
||||
"name": "Nombre"
|
||||
},
|
||||
"introduction": "La configuración de planos te permite importar y administrar tus planos.",
|
||||
"learn_more": "Aprende más sobre el uso de planos",
|
||||
"introduction": "El editor de planos te permite crear y editar planos.",
|
||||
"learn_more": "Más información sobre planos",
|
||||
"use_blueprint": "Crear automatización"
|
||||
}
|
||||
},
|
||||
@@ -1507,7 +1486,7 @@
|
||||
"webhooks": {
|
||||
"disable_hook_error_msg": "No se pudo deshabilitar el webhook:",
|
||||
"info": "Cualquier cosa que esté configurada para ser activada por un webhook puede recibir una URL de acceso público para permitirte enviar datos a Home Assistant desde cualquier lugar, sin exponer tu instancia a Internet.",
|
||||
"link_learn_more": "Aprende más sobre la creación de automatizaciones basadas en webhook.",
|
||||
"link_learn_more": "Saber más sobre la creación de automatizaciones basadas en webhook.",
|
||||
"loading": "Cargando ...",
|
||||
"manage": "Administrar",
|
||||
"no_hooks_yet": "Parece que aún no tienes webhooks. Comienza configurando un",
|
||||
@@ -1531,7 +1510,7 @@
|
||||
"title": "Alexa"
|
||||
},
|
||||
"caption": "Nube Home Assistant",
|
||||
"description_features": "Controla tu hogar cuando estés fuera e intégralo con Alexa y Google Assistant",
|
||||
"description_features": "Control fuera de casa, integración con Alexa y Google Assistant.",
|
||||
"description_login": "Has iniciado sesión como {email}",
|
||||
"description_not_login": "No has iniciado sesión",
|
||||
"dialog_certificate": {
|
||||
@@ -1587,7 +1566,7 @@
|
||||
"introduction2": "Este servicio está a cargo de nuestro socio.",
|
||||
"introduction2a": ", una compañía fundada por los fundadores de Home Assistant y Hass.io.",
|
||||
"introduction3": "Home Assistant Cloud es un servicio de suscripción con una prueba gratuita de un mes. No se necesita información de pago.",
|
||||
"learn_more_link": "Aprende más sobre Home Assistant Cloud",
|
||||
"learn_more_link": "Saber más sobre Home Assistant Cloud",
|
||||
"password": "Contraseña",
|
||||
"password_error_msg": "Las contraseñas tienen al menos 8 caracteres.",
|
||||
"sign_in": "Inicia sesión",
|
||||
@@ -1626,7 +1605,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "Configuración general",
|
||||
"description": "Sistema de unidades, ubicación, zona horaria y otros parámetros generales",
|
||||
"description": "Cambia la configuración general de Home Assistant",
|
||||
"section": {
|
||||
"core": {
|
||||
"core_config": {
|
||||
@@ -1688,7 +1667,6 @@
|
||||
"unknown_condition": "Condición desconocida"
|
||||
},
|
||||
"create": "Crear automatización con el dispositivo",
|
||||
"create_disable": "No se puede crear una automatización con un dispositivo deshabilitado",
|
||||
"no_automations": "Sin automatizaciones",
|
||||
"no_device_automations": "No hay automatizaciones disponibles para este dispositivo.",
|
||||
"triggers": {
|
||||
@@ -1714,18 +1692,9 @@
|
||||
"no_devices": "Sin dispositivos"
|
||||
},
|
||||
"delete": "Eliminar",
|
||||
"description": "Administra dispositivos configurados",
|
||||
"description": "Administrar dispositivos conectados",
|
||||
"device_info": "Información del dispositivo",
|
||||
"device_not_found": "Dispositivo no encontrado.",
|
||||
"disabled": "Deshabilitado",
|
||||
"disabled_by": {
|
||||
"config_entry": "Entrada de configuración",
|
||||
"integration": "Integración",
|
||||
"user": "Usuario"
|
||||
},
|
||||
"enabled_cause": "El dispositivo está deshabilitado por {cause} .",
|
||||
"enabled_description": "Los dispositivos deshabilitados no se mostrarán y las entidades que pertenecen al dispositivo se deshabilitarán y no se añadirán a Home Assistant.",
|
||||
"enabled_label": "Habilitar dispositivo",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Añadir a Lovelace",
|
||||
"disabled_entities": "+{count} {count, plural,\n one {entidad deshabilitada}\n other {entidades deshabilitadas}\n}",
|
||||
@@ -1735,25 +1704,14 @@
|
||||
},
|
||||
"name": "Nombre",
|
||||
"no_devices": "Sin dispositivos",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtrar",
|
||||
"hidden_devices": "{number} {number, plural,\n one {dispositivo oculto}\n other {dispositivos ocultos}\n}",
|
||||
"show_all": "Mostrar todo",
|
||||
"show_disabled": "Mostrar dispositivos deshabilitados"
|
||||
},
|
||||
"search": "Buscar dispositivos"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Crear escena con el dispositivo",
|
||||
"create_disable": "No se puede crear una escena con un dispositivo deshabilitado",
|
||||
"no_scenes": "Sin escenas",
|
||||
"scenes": "Escenas"
|
||||
},
|
||||
"scenes": "Escenas",
|
||||
"script": {
|
||||
"create": "Crear script con el dispositivo",
|
||||
"create_disable": "No se puede crear un script con un dispositivo deshabilitado",
|
||||
"no_scripts": "Sin scripts",
|
||||
"scripts": "Scripts"
|
||||
},
|
||||
@@ -1786,7 +1744,6 @@
|
||||
},
|
||||
"header": "Entidades",
|
||||
"headers": {
|
||||
"area": "Área",
|
||||
"entity_id": "ID de entidad",
|
||||
"integration": "Integración",
|
||||
"name": "Nombre",
|
||||
@@ -1819,7 +1776,7 @@
|
||||
"header": "Configurar Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "Ayudantes",
|
||||
"description": "Elementos que ayudan a construir automatizaciones",
|
||||
"description": "Administra los elementos que pueden ayudar a construir automatizaciones.",
|
||||
"dialog": {
|
||||
"add_helper": "Añadir ayudante",
|
||||
"add_platform": "Añadir {platform}",
|
||||
@@ -1851,7 +1808,7 @@
|
||||
"copy_github": "Para GitHub",
|
||||
"copy_raw": "Texto sin procesar",
|
||||
"custom_uis": "IU personalizadas:",
|
||||
"description": "Versión, estado del sistema y enlaces a la documentación",
|
||||
"description": "Ver información sobre tu instalación de Home Assistant",
|
||||
"developed_by": "Desarrollado por un montón de gente impresionante.",
|
||||
"documentation": "Documentación",
|
||||
"frontend": "interfaz de usuario",
|
||||
@@ -1957,7 +1914,7 @@
|
||||
},
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurado",
|
||||
"description": "Gestiona integraciones con servicios, dispositivos, ...",
|
||||
"description": "Administra las integraciones",
|
||||
"details": "Detalles de la integración",
|
||||
"discovered": "Descubierto",
|
||||
"home_assistant_website": "Sitio web de Home Assistant",
|
||||
@@ -1990,7 +1947,7 @@
|
||||
"logs": {
|
||||
"caption": "Registros",
|
||||
"clear": "Limpiar",
|
||||
"description": "Ve los registros de Home Assistant",
|
||||
"description": "Ver los registros de Home Assistant",
|
||||
"details": "Detalles de registro ({level})",
|
||||
"load_full_log": "Cargar registro completo de Home Assistant",
|
||||
"loading_log": "Cargando registro de errores...",
|
||||
@@ -2042,7 +1999,7 @@
|
||||
"open": "Abrir"
|
||||
}
|
||||
},
|
||||
"description": "Crea conjuntos personalizados de tarjetas para controlar tu hogar",
|
||||
"description": "Administra tus Paneles de Control Lovelace",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Estás utilizando Lovelace en modo YAML, por tanto no puedes administrar tus recursos a través de la IU. Adminístralos en configuration.yaml.",
|
||||
"caption": "Recursos",
|
||||
@@ -2232,7 +2189,7 @@
|
||||
"update": "Actualizar"
|
||||
},
|
||||
"introduction": "Aquí puedes definir a cada persona de interés en Home Assistant.",
|
||||
"learn_more": "Aprende más sobre las personas",
|
||||
"learn_more": "Saber más sobre las personas",
|
||||
"no_persons_created_yet": "Parece que aún no has creado ninguna persona.",
|
||||
"note_about_persons_configured_in_yaml": "Nota: las personas configuradas a través de configuration.yaml no se pueden editar a través de la IU.",
|
||||
"person_not_found": "No pudimos encontrar a la persona que intentabas editar.",
|
||||
@@ -2241,7 +2198,7 @@
|
||||
"scene": {
|
||||
"activated": "Activada escena {name}.",
|
||||
"caption": "Escenas",
|
||||
"description": "Captura los estados de los dispositivos y recupéralos fácilmente más tarde",
|
||||
"description": "Administra las escenas",
|
||||
"editor": {
|
||||
"default_name": "Nueva Escena",
|
||||
"devices": {
|
||||
@@ -2276,7 +2233,7 @@
|
||||
"name": "Nombre"
|
||||
},
|
||||
"introduction": "El editor de escenas te permite crear y editar escenas. Por favor, sigue el siguiente enlace para leer las instrucciones para asegurarte de que has configurado Home Assistant correctamente.",
|
||||
"learn_more": "Aprende más sobre las escenas",
|
||||
"learn_more": "Saber más sobre las escenas",
|
||||
"no_scenes": "No pudimos encontrar ninguna escena editable",
|
||||
"only_editable": "Solo las escenas definidas en scenes.yaml son editables.",
|
||||
"pick_scene": "Elige una escena para editar",
|
||||
@@ -2285,7 +2242,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Scripts",
|
||||
"description": "Ejecuta una secuencia de acciones",
|
||||
"description": "Administra los scripts",
|
||||
"editor": {
|
||||
"alias": "Nombre",
|
||||
"default_name": "Nuevo script",
|
||||
@@ -2297,7 +2254,7 @@
|
||||
"id_already_exists": "Este ID ya existe",
|
||||
"id_already_exists_save_error": "No puedes guardar este script porque el ID no es único, elije otro ID o déjalo en blanco para generar uno automáticamente.",
|
||||
"introduction": "Utiliza scripts para ejecutar una secuencia de acciones.",
|
||||
"link_available_actions": "Aprende más sobre las acciones disponibles.",
|
||||
"link_available_actions": "Saber más sobre las acciones disponibles.",
|
||||
"load_error_not_editable": "Solo los scripts dentro de scripts.yaml son editables.",
|
||||
"max": {
|
||||
"parallel": "Número máximo de ejecuciones paralelas",
|
||||
@@ -2326,7 +2283,7 @@
|
||||
"name": "Nombre"
|
||||
},
|
||||
"introduction": "El editor de scripts te permite crear y editar scripts. Por favor, sigue el siguiente enlace para leer las instrucciones para asegurarte de que has configurado Home Assistant correctamente.",
|
||||
"learn_more": "Aprende más sobre los scripts",
|
||||
"learn_more": "Saber más sobre los scripts",
|
||||
"no_scripts": "No hemos encontrado ningún script editable",
|
||||
"run_script": "Ejecutar script",
|
||||
"show_info": "Mostrar información sobre el script",
|
||||
@@ -2396,7 +2353,7 @@
|
||||
"confirm_remove": "¿Estás seguro de que quieres eliminar la etiqueta {tag} ?",
|
||||
"confirm_remove_title": "¿Eliminar etiqueta?",
|
||||
"create_automation": "Crear automatización con etiqueta",
|
||||
"description": "Activa automatizaciones cuando se escanea una etiqueta NFC, un código QR, etc.",
|
||||
"description": "Administrar etiquetas",
|
||||
"detail": {
|
||||
"companion_apps": "aplicaciones complementarias",
|
||||
"create": "Crear",
|
||||
@@ -2415,7 +2372,7 @@
|
||||
"last_scanned": "Última vez escaneada",
|
||||
"name": "Nombre"
|
||||
},
|
||||
"learn_more": "Aprende más sobre las etiquetas",
|
||||
"learn_more": "Más información sobre las etiquetas",
|
||||
"never_scanned": "Nunca escaneado",
|
||||
"no_tags": "Sin etiquetas",
|
||||
"write": "Escribir"
|
||||
@@ -2431,11 +2388,10 @@
|
||||
"username": "Nombre de usuario"
|
||||
},
|
||||
"caption": "Usuarios",
|
||||
"description": "Administra las cuentas de usuario de Home Assistant",
|
||||
"description": "Administra usuarios",
|
||||
"editor": {
|
||||
"activate_user": "Activar usuario",
|
||||
"active": "Activo",
|
||||
"active_tooltip": "Controla si el usuario puede iniciar sesión",
|
||||
"admin": "Administrador",
|
||||
"caption": "Ver usuario",
|
||||
"change_password": "Cambiar la contraseña",
|
||||
@@ -2515,16 +2471,6 @@
|
||||
"value": "Valor"
|
||||
},
|
||||
"description": "Administración de red de Domótica Zigbee",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Configuración completada",
|
||||
"CONFIGURED_status_text": "Inicializando",
|
||||
"INITIALIZED": "Inicialización completada",
|
||||
"INITIALIZED_status_text": "El dispositivo está listo para ser usado",
|
||||
"INTERVIEW_COMPLETE": "Entrevista completada",
|
||||
"INTERVIEW_COMPLETE_status_text": "Configurando",
|
||||
"PAIRED": "Dispositivo encontrado",
|
||||
"PAIRED_status_text": "Iniciando entrevista"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Domótica Zigbee - Dispositivo"
|
||||
},
|
||||
@@ -2629,7 +2575,7 @@
|
||||
"wakeup_interval": "Intervalo de activación"
|
||||
},
|
||||
"description": "Administra tu red Z-Wave",
|
||||
"learn_more": "Aprende más sobre Z-Wave",
|
||||
"learn_more": "Saber más sobre Z-Wave",
|
||||
"network_management": {
|
||||
"header": "Administración de red Z-Wave",
|
||||
"introduction": "Ejecutar comandos que afectan a la red Z-Wave. No recibirás comentarios sobre si la mayoría de los comandos tuvieron éxito, pero puedes consultar el Registro OZW para intentar averiguarlo."
|
||||
@@ -3368,7 +3314,7 @@
|
||||
"demo": {
|
||||
"demo_by": "por {name}",
|
||||
"introduction": "¡Bienvenido a casa! Has llegado a la demostración de Home Assistant donde mostramos las mejores interfaces de usuario creadas por nuestra comunidad.",
|
||||
"learn_more": "Aprende más sobre Home Assistant",
|
||||
"learn_more": "Saber más sobre Home Assistant",
|
||||
"next_demo": "Siguiente demostración"
|
||||
}
|
||||
},
|
||||
@@ -3448,19 +3394,16 @@
|
||||
"profile": {
|
||||
"advanced_mode": {
|
||||
"description": "Desbloquea las funciones avanzadas.",
|
||||
"link_promo": "Aprende más",
|
||||
"link_promo": "Saber más",
|
||||
"title": "Modo avanzado"
|
||||
},
|
||||
"change_password": {
|
||||
"confirm_new_password": "Confirmar nueva contraseña",
|
||||
"current_password": "Contraseña actual",
|
||||
"error_new_is_old": "La nueva contraseña debe ser diferente a la contraseña actual",
|
||||
"error_new_mismatch": "Los nuevos valores de contraseña introducidos no coinciden",
|
||||
"error_required": "Obligatorio",
|
||||
"header": "Cambiar contraseña",
|
||||
"new_password": "Nueva contraseña",
|
||||
"submit": "Enviar",
|
||||
"success": "Contraseña cambiada con éxito"
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"current_user": "Has iniciado sesión como {fullName}.",
|
||||
"customize_sidebar": {
|
||||
@@ -3529,7 +3472,7 @@
|
||||
"error_load_platform": "Configurar notify.html5.",
|
||||
"error_use_https": "Requiere SSL activado para frontend.",
|
||||
"header": "Notificaciones push",
|
||||
"link_promo": "Aprende más",
|
||||
"link_promo": "Saber más",
|
||||
"push_notifications": "Notificaciones push"
|
||||
},
|
||||
"refresh_tokens": {
|
||||
|
@@ -2,7 +2,6 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Seade kanne",
|
||||
"device": "Seade",
|
||||
"integration": "Sidumine",
|
||||
"user": "Kasutaja"
|
||||
}
|
||||
@@ -547,8 +546,6 @@
|
||||
"add_new": "Lisa uus ala...",
|
||||
"area": "Ala",
|
||||
"clear": "Puhasta",
|
||||
"no_areas": "Alad puuduvad",
|
||||
"no_match": "Sobivaid alasid ei leitud",
|
||||
"show_areas": "Näita alasid"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
@@ -569,8 +566,6 @@
|
||||
"clear": "Puhasta",
|
||||
"device": "Seade",
|
||||
"no_area": "Ala puudub",
|
||||
"no_devices": "Seadmed puuduvad",
|
||||
"no_match": "Sobivaid seadmeid ei leitud",
|
||||
"show_devices": "Näita seadmeid",
|
||||
"toggle": "Lülita"
|
||||
},
|
||||
@@ -582,7 +577,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Puhasta",
|
||||
"entity": "Olem",
|
||||
"no_match": "Sobivaid olemeid ei leitud",
|
||||
"show_entities": "Näita olemeid"
|
||||
}
|
||||
},
|
||||
@@ -591,7 +585,7 @@
|
||||
"no_history_found": "Oleku ajalugu ei leitud"
|
||||
},
|
||||
"logbook": {
|
||||
"by": ", allikas:",
|
||||
"by": "allikas:",
|
||||
"by_service": "teenuse poolt",
|
||||
"entries_not_found": "Logiraamatu kandeid ei leitud.",
|
||||
"messages": {
|
||||
@@ -716,16 +710,6 @@
|
||||
"service-picker": {
|
||||
"service": "Teenus"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Vali ala",
|
||||
"add_device_id": "Vali seade",
|
||||
"add_entity_id": "Vali olem",
|
||||
"expand_area_id": "Laienda seda ala eraldi seadmetesse jaolemitesse mis sellesse kuuluvad. Pärast laiendamist ei värskendata seadmeid ja olemeid, kui ala muutub.",
|
||||
"expand_device_id": "Laienda seda seadet eraldi olemitesse. Pärast laiendamist ei värskendata olemeid, kui seade muutub.",
|
||||
"remove_area_id": "Eemalda ala",
|
||||
"remove_device_id": "Eemalda seade",
|
||||
"remove_entity_id": "Eemalda olem"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Lisa kasutaja",
|
||||
"no_user": "Kasutaja puudub",
|
||||
@@ -749,7 +733,6 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Oled kindel, et soovid selle kirje kustutada?",
|
||||
"delete": "Kustuta",
|
||||
"device_disabled": "Selle olemi seade on keelatud.",
|
||||
"enabled_cause": "Keelatud, sest {cause}.",
|
||||
"enabled_delay_confirm": "Lubatud üksused lisatakse Home Assistanti {delay} sekundi pärast",
|
||||
"enabled_description": "Keelatud olemeid ei lisata Home Assistant'i.",
|
||||
@@ -760,7 +743,6 @@
|
||||
"icon_error": "Ikoonid peaksid olema vormingus 'prefix: iconname', nt 'mdi: home'",
|
||||
"name": "Nime muutmine",
|
||||
"note": "Märkus: see ei pruugi veel töötada kõigi sidumistega.",
|
||||
"open_device_settings": "Seadme sätete avamine",
|
||||
"unavailable": "See olem pole praegu saadaval.",
|
||||
"update": "Uuenda"
|
||||
},
|
||||
@@ -1048,7 +1030,7 @@
|
||||
"confirmation_text": "Kõik sellele ala seadmed jäävad peremehetuks.",
|
||||
"confirmation_title": "Oled kindel, et soovid selle ala kustutada?"
|
||||
},
|
||||
"description": "Seadmete ja olemite rühmitamine aladesse",
|
||||
"description": "Ülevaade kõikidest oma kodu aladest.",
|
||||
"editor": {
|
||||
"area_id": "Piirkonna ID",
|
||||
"create": "LOO",
|
||||
@@ -1070,7 +1052,7 @@
|
||||
},
|
||||
"automation": {
|
||||
"caption": "Automatiseeringud",
|
||||
"description": "Loo oma kodu jaoks kohandatud käitumisreeglid",
|
||||
"description": "Loo ja redigeeri automatiseeringuid",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Kasuta kavandit"
|
||||
@@ -1258,7 +1240,7 @@
|
||||
"edit_ui": "Redigeeri kasutajaliidese abil",
|
||||
"edit_yaml": "Redigeeri YAML-ina",
|
||||
"enable_disable": "Luba/Keela automatiseering",
|
||||
"introduction": "Kasuta automatiseeringuid oma kodule elu sisse puhumiseks.",
|
||||
"introduction": "Kasuta oma kodule elu sisse puhumiseks automatiseeringuid.",
|
||||
"load_error_not_editable": "Ainult automations.yaml failis asuvad automatiseeringud on muudetavad.",
|
||||
"load_error_unknown": "Viga automatiseeringu laadimisel ({err_no}).",
|
||||
"max": {
|
||||
@@ -1417,37 +1399,34 @@
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "kogukonna foorumid",
|
||||
"error_no_url": "Sisesta kavandi URL.",
|
||||
"file_name": "Kohaliku kavandifaili asukoht",
|
||||
"header": "Impordi kavand",
|
||||
"import_btn": "Kavandi eelvaade",
|
||||
"import_header": "Kavand \"{name}\"",
|
||||
"import_introduction": "Teiste kasutajate kavandeid saad importida Githubist ja kogukonna foorumitest. Sisesta allpool kavandi URL.",
|
||||
"import_introduction_link": "Teiste kasutajate kavandeid saad importida Githubist ja lehelt {community_link}. Sisesta allpool kavandi URL.",
|
||||
"importing": "Kavandi laadimine...",
|
||||
"file_name": "Kohaliku kavandifaili nimi",
|
||||
"header": "Uue kavandi lisamine",
|
||||
"import_btn": "Impordi kavand",
|
||||
"import_header": "Impordi {name} ( type:{domain} )",
|
||||
"import_introduction": "Teiste kasutajate kavandeid saad importida Githubist ja kogukonna foorumitest. Sisesta alloleva kavandi URL.",
|
||||
"importing": "Kavandi importimine ...",
|
||||
"raw_blueprint": "Kavandi sisu",
|
||||
"save_btn": "Impordi kavand",
|
||||
"saving": "Kavandiimportimine...",
|
||||
"save_btn": "Salvesta kavand",
|
||||
"saving": "Kavandi salvestamine ...",
|
||||
"unsupported_blueprint": "Seda kavandit ei toetata",
|
||||
"url": "Kavandi URL"
|
||||
},
|
||||
"caption": "Kavandid",
|
||||
"caption": "",
|
||||
"description": "Kavandite haldamine",
|
||||
"overview": {
|
||||
"add_blueprint": "Laadi kavand",
|
||||
"confirm_delete_header": "Kas kustutada see kavand?",
|
||||
"confirm_delete_text": "Kas soovid kindlasti selle kavandi kustutada?",
|
||||
"delete_blueprint": "Kustuta kavand",
|
||||
"discover_more": "Avasta rohkem kavandeid",
|
||||
"header": "Kavandi redaktor",
|
||||
"headers": {
|
||||
"domain": "Domeen",
|
||||
"file_name": "Faili nimi",
|
||||
"name": "Nimi"
|
||||
},
|
||||
"introduction": "Kavandite seadistus võimaldab importida ja hallata oma kavandeid.",
|
||||
"learn_more": "Lisateave kavandite kasutamise kohta",
|
||||
"introduction": "Kavandite redaktor võimaldab luua ja muuta kavandeid.",
|
||||
"learn_more": "Lisateave kavandite kohta",
|
||||
"use_blueprint": "Loo automatiseering"
|
||||
}
|
||||
},
|
||||
@@ -1477,7 +1456,7 @@
|
||||
"enable_state_reporting": "Lubada olekuteavitused",
|
||||
"enter_pin_error": "PIN-koodi ei saa salvestada:",
|
||||
"enter_pin_hint": "Turvaseadmete kasutamiseks sisesta PIN",
|
||||
"enter_pin_info": "Turvaseadmetega suhtlemiseks sisesta PIN-kood. Turvaseadmed on uksed, garaažiuksed ja lukud. Google Assistanti kaudu selliste seadmetega suheldes palutakse Teil see PIN-kood öelda / sisestada.",
|
||||
"enter_pin_info": "Turvaseadmetega suhtlemiseks sisestage PIN-kood. Turvaseadmed on uksed, garaažiuksed ja lukud. Google Assistanti kaudu selliste seadmetega suheldes palutakse Teil see PIN-kood öelda / sisestada.",
|
||||
"info": "Google Assistanti integreerimisel läbi Home Assistant Cloudi saate juhtida kõiki oma Home Assistanti seadmeid mis tahes Google Assistanti toega seadme kaudu.",
|
||||
"info_state_reporting": "Kui lubate olekute avaldamise, saadab Home Assistant Google'ile kõik avaldatud olemite olekumuutused. See võimaldab Teil alati näha Google'i rakenduses uusimaid olekuid.",
|
||||
"manage_entities": "Halda olemeid",
|
||||
@@ -1499,7 +1478,7 @@
|
||||
"info": "Home Assistant Cloud pakub turvalist kaugühendust teie Home Assistantiga kodust eemal olles.",
|
||||
"instance_is_available": "Teie Home Assistant on saadaval aadressil",
|
||||
"instance_will_be_available": "Teie Home Assistanti on aadressiks saab",
|
||||
"link_learn_how_it_works": "Loe kuidas see töötab",
|
||||
"link_learn_how_it_works": "Loe, kuidas see töötab",
|
||||
"title": "Kaugjuhtimine"
|
||||
},
|
||||
"sign_out": "Logi välja",
|
||||
@@ -1556,7 +1535,7 @@
|
||||
"check_your_email": "Parooli lähtestamise kohta saate juhiseid oma e-posti aadressilt.",
|
||||
"email": "E-post",
|
||||
"email_error_msg": "Vigane meiliaadress",
|
||||
"instructions": "Sisesta oma e-posti aadress ja me saadame teile lingi parooli lähtestamiseks.",
|
||||
"instructions": "Sisestage oma e-posti aadress ja me saadame teile lingi parooli lähtestamiseks.",
|
||||
"send_reset_email": "Saatke lähtestamismeil",
|
||||
"subtitle": "Unustasid oma salasõna",
|
||||
"title": "Unustasid salasõna"
|
||||
@@ -1626,7 +1605,7 @@
|
||||
},
|
||||
"core": {
|
||||
"caption": "Üldine",
|
||||
"description": "Ühikud, asukoht, ajavöönd ja muud üldised parameetrid",
|
||||
"description": "Home Assistant'i üldiste seadete muutmine",
|
||||
"section": {
|
||||
"core": {
|
||||
"core_config": {
|
||||
@@ -1688,7 +1667,6 @@
|
||||
"unknown_condition": "Tundmatu tingimus"
|
||||
},
|
||||
"create": "Loo seadmega automatiseering",
|
||||
"create_disable": "Keelatud seadmega ei saa automaatiseeringuid luua",
|
||||
"no_automations": "Automatiseeringuid pole",
|
||||
"no_device_automations": "Selle seadme jaoks pole automatiseerimisi saadaval.",
|
||||
"triggers": {
|
||||
@@ -1714,18 +1692,9 @@
|
||||
"no_devices": "Seadmeid pole"
|
||||
},
|
||||
"delete": "Kustuta",
|
||||
"description": "Halda häälestatud seadmeid",
|
||||
"description": "Halda ühendatud seadmeid",
|
||||
"device_info": "Seadme info",
|
||||
"device_not_found": "Seadet ei leitud.",
|
||||
"disabled": "Keelatud",
|
||||
"disabled_by": {
|
||||
"config_entry": "Seade kanne",
|
||||
"integration": "Sidumine",
|
||||
"user": "Kasutaja"
|
||||
},
|
||||
"enabled_cause": "{cause} on seadme keelanud.",
|
||||
"enabled_description": "Keelatud seadmeid ei kuvata ja seadmele kuuluvad olemid keelatakse ning neid ei lisata Home Assistantile.",
|
||||
"enabled_label": "Luba seade",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Lisa Lovelace'i",
|
||||
"disabled_entities": "{count} {count, plural,\n one {keelatud olem}\n other {keelatud olemit}\n}",
|
||||
@@ -1735,25 +1704,14 @@
|
||||
},
|
||||
"name": "Nimi",
|
||||
"no_devices": "Seadmeid pole",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Filtreeri",
|
||||
"hidden_devices": "{number} peidetud {number, plural,\n one {olem}\n other {olemit}\n}",
|
||||
"show_all": "Kuva kõik",
|
||||
"show_disabled": "Kuva keelatud seadmed"
|
||||
},
|
||||
"search": "Otsi seadmeid"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Loo seadmega stseen",
|
||||
"create_disable": "Keelatud seadmega ei saa stseene luua",
|
||||
"no_scenes": "Stseene pole",
|
||||
"scenes": "Stseenid"
|
||||
},
|
||||
"scenes": "Stseenid",
|
||||
"script": {
|
||||
"create": "Loo seadmega skript",
|
||||
"create_disable": "Keelatud seadmega ei saa skripte luua",
|
||||
"no_scripts": "Skripte pole",
|
||||
"scripts": "Skriptid"
|
||||
},
|
||||
@@ -1786,7 +1744,6 @@
|
||||
},
|
||||
"header": "Olemid",
|
||||
"headers": {
|
||||
"area": "Ala",
|
||||
"entity_id": "Olemi ID",
|
||||
"integration": "Sidumine",
|
||||
"name": "Nimi",
|
||||
@@ -1819,7 +1776,7 @@
|
||||
"header": "Home Assistant'i seadistamine",
|
||||
"helpers": {
|
||||
"caption": "Abimehed",
|
||||
"description": "Elemendid mis aitavad automatiseeringuid luua",
|
||||
"description": "Hallake elemente mis aitavad automatiseeringuid luua",
|
||||
"dialog": {
|
||||
"add_helper": "Lisage abistaja",
|
||||
"add_platform": "Lisa {platform}",
|
||||
@@ -1851,7 +1808,7 @@
|
||||
"copy_github": "GitHubi jaoks",
|
||||
"copy_raw": "Ainult tekst",
|
||||
"custom_uis": "Kohandatud kasutajaliidesed:",
|
||||
"description": "Versioon, süsteemi olek ja lingid dokumentatsioonile",
|
||||
"description": "Kuva Home Assistant'i info",
|
||||
"developed_by": "Tehtud paljude lahedate inimeste poolt.",
|
||||
"documentation": "Dokumentatsioon",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1869,9 +1826,9 @@
|
||||
"checks": {
|
||||
"cloud": {
|
||||
"alexa_enabled": "Alexa on lubatud",
|
||||
"can_reach_cert_server": "Ühendus serdiserveriga",
|
||||
"can_reach_cloud": "Ühendus Home Assistant Cloudiga",
|
||||
"can_reach_cloud_auth": "Ühendus tuvastusserveriga",
|
||||
"can_reach_cert_server": "Ühendu serdiserveriga",
|
||||
"can_reach_cloud": "Ühendu Home Assistant Cloudiga",
|
||||
"can_reach_cloud_auth": "Ühendu tuvastusserveriga",
|
||||
"google_enabled": "Google on lubatud",
|
||||
"logged_in": "Sisse logitud",
|
||||
"relayer_connected": "Edastaja on ühendatud",
|
||||
@@ -1957,7 +1914,7 @@
|
||||
},
|
||||
"configure": "Seadista",
|
||||
"configured": "Seadistatud",
|
||||
"description": "Halda teenuste, seadmete jne. sidumisi",
|
||||
"description": "Halda ja seadista sidumisi",
|
||||
"details": "Sidumise üksikasjad",
|
||||
"discovered": "Leitud",
|
||||
"home_assistant_website": "Home Assistant veebisait",
|
||||
@@ -2042,7 +1999,7 @@
|
||||
"open": "Ava"
|
||||
}
|
||||
},
|
||||
"description": "Loo oma kodu juhtimiseks kohandatud juhtpaneele",
|
||||
"description": "Hallake oma Lovelace juhtpaneele",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Kasutate Lovelace YAML režiimis. Seega ei saa Te hallata oma ressursse kasutajaliidese kaudu. Halda neid kirjes configuration.yaml.",
|
||||
"caption": "Ressursid",
|
||||
@@ -2241,7 +2198,7 @@
|
||||
"scene": {
|
||||
"activated": "Stseen {name} on käivitatud.",
|
||||
"caption": "Stseenid",
|
||||
"description": "Seadme olekute hõivamine ja nende hilisem taaskasutamine",
|
||||
"description": "Loo ja muuda stseene",
|
||||
"editor": {
|
||||
"default_name": "Uus stseen",
|
||||
"devices": {
|
||||
@@ -2285,7 +2242,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Skriptid",
|
||||
"description": "Vallanda toimingute jada",
|
||||
"description": "Loo ja muuda skripte",
|
||||
"editor": {
|
||||
"alias": "Nimi",
|
||||
"default_name": "Uus skript",
|
||||
@@ -2335,7 +2292,7 @@
|
||||
},
|
||||
"server_control": {
|
||||
"caption": "Serveri juhtimine",
|
||||
"description": "Taaskäivita ja peata Home Assistant serverit",
|
||||
"description": "Taaskäivita ja peata Home Assistant server",
|
||||
"section": {
|
||||
"reloading": {
|
||||
"automation": "Taaslae automatiseeringud",
|
||||
@@ -2373,7 +2330,7 @@
|
||||
"zone": "Taaslae tsoonid"
|
||||
},
|
||||
"server_management": {
|
||||
"confirm_restart": "Oled kindel, et soovid Home Assistant'i taaskäivitada?",
|
||||
"confirm_restart": "Oled kindel, et soovid taaskäivitada Home Assistant'i?",
|
||||
"confirm_stop": "Oled kindel, et soovid seisata Home Assistant'i?",
|
||||
"heading": "Serveri haldamine",
|
||||
"introduction": "Kontrolli oma Home Assistant serverit... Home Assistant'ist.",
|
||||
@@ -2396,7 +2353,7 @@
|
||||
"confirm_remove": "Kas soovid kindlasti eemaldada märgise {tag}?",
|
||||
"confirm_remove_title": "Kas kustutan märgise?",
|
||||
"create_automation": "Lisa automatiseering TAG abil",
|
||||
"description": "Käivita automaatiseering NFC-sildi, QR-koodi jne. skännimisel",
|
||||
"description": "Halda TAGe",
|
||||
"detail": {
|
||||
"companion_apps": "mobiilirakendused",
|
||||
"create": "Loo",
|
||||
@@ -2431,11 +2388,10 @@
|
||||
"username": "Kasutajanimi"
|
||||
},
|
||||
"caption": "Kasutajad",
|
||||
"description": "Halda kasutakontosid",
|
||||
"description": "Halda kasutajaid",
|
||||
"editor": {
|
||||
"activate_user": "Aktiveeri kasutaja",
|
||||
"active": "Aktiivne",
|
||||
"active_tooltip": "Määrab kas kasutaja saab sisse logida",
|
||||
"admin": "Administraator",
|
||||
"caption": "Vaata kasutajat",
|
||||
"change_password": "Muuda salasõna",
|
||||
@@ -2515,16 +2471,6 @@
|
||||
"value": "Väärtus"
|
||||
},
|
||||
"description": "Zigbee Home Automation võrgu haldamine",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Seadistamine on lõpetatud",
|
||||
"CONFIGURED_status_text": "Lähtestan",
|
||||
"INITIALIZED": "Lähtestamine on lõpetatud",
|
||||
"INITIALIZED_status_text": "Seade on kasutamiseks valmis",
|
||||
"INTERVIEW_COMPLETE": "Küsitlemine on lõpetatud",
|
||||
"INTERVIEW_COMPLETE_status_text": "Seadistan",
|
||||
"PAIRED": "Seade on leitud",
|
||||
"PAIRED_status_text": "Alustan küsitlemist"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Zigbee Home Automation - Seade"
|
||||
},
|
||||
@@ -2546,7 +2492,7 @@
|
||||
"caption": "Grupid",
|
||||
"create": "Loo grupp",
|
||||
"create_group": "Zigbee Home Automation - Loo grupp",
|
||||
"create_group_details": "Sisesta uue Zigbee grupi loomiseks vajalikud üksikasjad.",
|
||||
"create_group_details": "Sisestage uue zigbee grupi loomiseks vajalikud üksikasjad.",
|
||||
"creating_group": "Loon gruppi",
|
||||
"description": "Loo ja muuda Zigbee gruppe",
|
||||
"group_details": "Siin on kõik valitud Zigbee rühma üksikasjad.",
|
||||
@@ -2875,7 +2821,7 @@
|
||||
},
|
||||
"calendar": {
|
||||
"calendar_entities": "Kalendri olemid",
|
||||
"description": "Kalendri kaardil kuvatakse kalender mis sisaldab päeva-, nädala- ja loendivaateid",
|
||||
"description": "Kalendri kaardil kuvatakse kalender mis sisaldab päeva, nädala ja loendivaateid",
|
||||
"inital_view": "Vaikevaade",
|
||||
"name": "Kalender",
|
||||
"views": {
|
||||
@@ -2900,7 +2846,7 @@
|
||||
"required": "Nõutav"
|
||||
},
|
||||
"entities": {
|
||||
"description": "Olemite kaart on kõige levinum kaarditüüp. See rühmitab olemid loenditeks.",
|
||||
"description": "Olemite kaart on kõige levinum kaarditüüp. See rühmitabolemid loenditeks.",
|
||||
"edit_special_row": "Selle rea üksikasjade vaatamiseks klõpsa nuppu Muuda",
|
||||
"entity_row_editor": "Olemirea redaktor",
|
||||
"entity_row": {
|
||||
@@ -2930,7 +2876,7 @@
|
||||
"toggle": "Vaheta olemeid."
|
||||
},
|
||||
"entity-filter": {
|
||||
"description": "Olemifiltri kaart võimaldab teil määratleda nende olemite loendit mida soovid jälgida ainult teatud olekus.",
|
||||
"description": "Olemifiltri kaart võimaldab teil määratleda nende olemite loendit mida soovite jälgida ainult teatud olekus.",
|
||||
"name": "Olemi filter"
|
||||
},
|
||||
"entity": {
|
||||
@@ -3454,13 +3400,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Kinnita uut salasõna",
|
||||
"current_password": "Praegune salasõna",
|
||||
"error_new_is_old": "Uus salasõna peab praegusest erinema",
|
||||
"error_new_mismatch": "Sisestatud uus salasõna ei ühti",
|
||||
"error_required": "Nõutav",
|
||||
"header": "Muuda salasõna",
|
||||
"new_password": "Uus salasõna",
|
||||
"submit": "Esita",
|
||||
"success": "Salasõna muutmine õnnestus"
|
||||
"submit": "Esita"
|
||||
},
|
||||
"current_user": "Oled praegu sisse logitud kui {fullName}.",
|
||||
"customize_sidebar": {
|
||||
|
@@ -2,13 +2,11 @@
|
||||
"config_entry": {
|
||||
"disabled_by": {
|
||||
"config_entry": "Asetus",
|
||||
"device": "Laite",
|
||||
"integration": "Integraatio",
|
||||
"user": "Käyttäjä"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"owner": "Omistaja",
|
||||
"system-admin": "Järjestelmänvalvojat",
|
||||
"system-read-only": "Pelkästään luku -käyttäjät",
|
||||
"system-users": "Käyttäjät"
|
||||
@@ -513,23 +511,15 @@
|
||||
"continue": "Jatka",
|
||||
"copied": "Kopioitu",
|
||||
"delete": "Poista",
|
||||
"disable": "Poista käytöstä",
|
||||
"enable": "Ota käyttöön",
|
||||
"error_required": "Pakollinen",
|
||||
"leave": "Poistu",
|
||||
"loading": "Ladataan",
|
||||
"menu": "Valikko",
|
||||
"next": "Seuraava",
|
||||
"no": "Ei",
|
||||
"not_now": "Ei nyt",
|
||||
"overflow_menu": "Ylivuotovalikko",
|
||||
"previous": "Edellinen",
|
||||
"refresh": "Päivitä",
|
||||
"remove": "Poista",
|
||||
"rename": "Nimeä uudelleen",
|
||||
"save": "Tallenna",
|
||||
"skip": "Ohita",
|
||||
"stay": "Pysy",
|
||||
"successfully_deleted": "Poistettu onnistuneesti",
|
||||
"successfully_saved": "Tallennus onnistui",
|
||||
"undo": "Kumoa",
|
||||
@@ -547,15 +537,8 @@
|
||||
"add_new": "Lisää uusi alue...",
|
||||
"area": "Alue",
|
||||
"clear": "Tyhjennä",
|
||||
"no_areas": "Sinulla ei ole alueita",
|
||||
"no_match": "Vastaavia alueita ei löytynyt",
|
||||
"show_areas": "Näytä alueet"
|
||||
},
|
||||
"blueprint-picker": {
|
||||
"add_user": "Lisää käyttäjä",
|
||||
"remove_user": "Poista käyttäjä",
|
||||
"select_blueprint": "Valitse pohjapiirros"
|
||||
},
|
||||
"data-table": {
|
||||
"no-data": "Ei dataa",
|
||||
"search": "Hae"
|
||||
@@ -569,8 +552,6 @@
|
||||
"clear": "Tyhjennä",
|
||||
"device": "Laite",
|
||||
"no_area": "Ei aluetta",
|
||||
"no_devices": "Sinulla ei ole laitteita",
|
||||
"no_match": "Vastaavia laitteita ei löytynyt",
|
||||
"show_devices": "Näytä laitteet",
|
||||
"toggle": "Vaihda"
|
||||
},
|
||||
@@ -582,7 +563,6 @@
|
||||
"entity-picker": {
|
||||
"clear": "Tyhjennä",
|
||||
"entity": "Kohde",
|
||||
"no_match": "Vastaavia kohteita ei löytynyt",
|
||||
"show_entities": "Näytä kohteet"
|
||||
}
|
||||
},
|
||||
@@ -695,35 +675,13 @@
|
||||
"week": "{count} {count, plural,\n one {viikko}\n other {viikkoa}\n}"
|
||||
},
|
||||
"future": "{time} kuluttua",
|
||||
"future_duration": {
|
||||
"day": "{count} {count, plural,\n one {päivän}\n other {päivän}\n} kuluessa",
|
||||
"hour": "{count} {count, plural,\none {tunnin\nother {tunnin}\n} kuluessa",
|
||||
"minute": "{count} {count, plural,\none {minuutin}\nother {minuutin}\n} kuluessa",
|
||||
"second": "{count} {count, plural,\none {sekunnin}\nother {sekunnin}\n} kuluessa",
|
||||
"week": "{count} {count, plural,\n one {viikon}\n other {viikon}\n} kuluessa"
|
||||
},
|
||||
"just_now": "Juuri nyt",
|
||||
"never": "Ei koskaan",
|
||||
"past": "{time} sitten",
|
||||
"past_duration": {
|
||||
"day": "{count} {count, plural,\n one {päivä}\n other {päivää}\n} sitten",
|
||||
"hour": "{count} {count, plural,\none {tunti}\nother {tuntia}\n} sitten",
|
||||
"minute": "{count} {count, plural,\none {minuutti}\nother {minuuttia}\n} sitten",
|
||||
"second": "{count} {count, plural,\none {sekunti}\nother {sekuntia}\n} sitten",
|
||||
"week": "{count} {count, plural,\n one {viikkoa}\n other {viikkoa}\n} sitten"
|
||||
}
|
||||
"past": "{time} sitten"
|
||||
},
|
||||
"service-picker": {
|
||||
"service": "Palvelu"
|
||||
},
|
||||
"target-picker": {
|
||||
"add_area_id": "Valitse alue",
|
||||
"add_device_id": "Valitse laite",
|
||||
"add_entity_id": "Valitse kohde",
|
||||
"remove_area_id": "Poista alue",
|
||||
"remove_device_id": "Poista laite",
|
||||
"remove_entity_id": "Poista kohde"
|
||||
},
|
||||
"user-picker": {
|
||||
"add_user": "Lisää käyttäjä",
|
||||
"no_user": "Ei käyttäjää",
|
||||
@@ -747,17 +705,14 @@
|
||||
"editor": {
|
||||
"confirm_delete": "Haluatko varmasti poistaa tämän kohteen?",
|
||||
"delete": "Poista",
|
||||
"device_disabled": "Tämän kohteen laite on poistettu käytöstä.",
|
||||
"enabled_cause": "{cause} on poistanut sen käytöstä.",
|
||||
"enabled_description": "Käytöstä poistettuja kohteita ei lisätä Home Assistantiin.",
|
||||
"enabled_label": "Ota kohte käyttöön",
|
||||
"enabled_restart_confirm": "Käynnistä Home Assistant uudelleen, jotta kohteet otetaan käyttöön",
|
||||
"entity_id": "Kohde ID",
|
||||
"icon": "Kuvakkeen yliajo",
|
||||
"icon_error": "Kuvakkeen tulisi olla muodossa etuliite:ikoni, esimerkiksi: mdi:home",
|
||||
"name": "Nimen yliajo",
|
||||
"note": "Huomaa: tämä ei ehkä vielä toimi kaikissa integraatioissa.",
|
||||
"open_device_settings": "Avaa laitteen asetukset",
|
||||
"unavailable": "Tämä kohde ei ole tällä hetkellä käytettävissä.",
|
||||
"update": "Päivitä"
|
||||
},
|
||||
@@ -829,7 +784,6 @@
|
||||
"dismiss": "Sulje ikkuna",
|
||||
"edit": "Muokkaa kohdetta",
|
||||
"history": "Historia",
|
||||
"last_changed": "Viimeksi muutettu",
|
||||
"last_updated": "Viimeksi päivitetty",
|
||||
"person": {
|
||||
"create_zone": "Luo vyöhyke nykyisestä sijainnista"
|
||||
@@ -888,30 +842,7 @@
|
||||
},
|
||||
"quick-bar": {
|
||||
"commands": {
|
||||
"navigation": {
|
||||
"areas": "Alueet",
|
||||
"automation": "Automaatiot",
|
||||
"blueprint": "Pohjapiirrokset",
|
||||
"core": "Yleinen",
|
||||
"customize": "Kustomointi",
|
||||
"devices": "Laitteet",
|
||||
"entities": "Kohteet",
|
||||
"helpers": "Apurit",
|
||||
"info": "Tiedot",
|
||||
"integrations": "Integraatiot",
|
||||
"logs": "Lokit",
|
||||
"lovelace": "Lovelace-kojelaudat",
|
||||
"navigate_to": "Siirry kohteeseen {panel}",
|
||||
"navigate_to_config": "Konfiguroi {panel}",
|
||||
"person": "Henkilöt",
|
||||
"script": "Skriptit",
|
||||
"server_control": "Palvelimen hallinta",
|
||||
"tags": "Tägit",
|
||||
"users": "Käyttäjät",
|
||||
"zone": "Alueet"
|
||||
},
|
||||
"reload": {
|
||||
"filesize": "Päivitä tiedostojen koot",
|
||||
"homekit": "Lataa HomeKit uudelleen",
|
||||
"input_boolean": "Lataa booleanit uudelleen",
|
||||
"input_datetime": "Lataa syöttöpäivämäärät uudelleen",
|
||||
@@ -921,14 +852,7 @@
|
||||
"rpi_gpio": "Lataa Raspberry Pi GPIO entiteetit uudelleen",
|
||||
"scene": "Lataa tilanteet uudelleen",
|
||||
"script": "Lataa scriptit uudelleen",
|
||||
"smtp": "Päivitä SMTP-ilmoituspalvelut",
|
||||
"telegram": "Päivitä Telegram-ilmoituspalvelut",
|
||||
"zone": "Lataa alueet uudelleen"
|
||||
},
|
||||
"server_control": {
|
||||
"perform_action": "{action} Palvelin",
|
||||
"restart": "Käynnistä uudelleen",
|
||||
"stop": "Pysäytä"
|
||||
}
|
||||
},
|
||||
"filter_placeholder": "Entiteetin suodatin"
|
||||
@@ -1042,17 +966,6 @@
|
||||
"automation": {
|
||||
"caption": "Automaatiot",
|
||||
"description": "Luo ja muokkaa automaatioita",
|
||||
"dialog_new": {
|
||||
"blueprint": {
|
||||
"use_blueprint": "Käytä pohjapiirrosta"
|
||||
},
|
||||
"header": "Luo uusi automaatio",
|
||||
"how": "Miten haluat luoda uuden automaation?",
|
||||
"thingtalk": {
|
||||
"header": "Kuvaile automaatiota, jonka haluat luoda",
|
||||
"intro": "Ja yritämme luoda sen sinulle. Esimerkiksi: Sammuta valot, kun lähden."
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
"actions": {
|
||||
"add": "Lisää toiminto",
|
||||
@@ -1133,9 +1046,6 @@
|
||||
"unsupported_action": "Toimintoa {action} ei tueta"
|
||||
},
|
||||
"alias": "Nimi",
|
||||
"blueprint": {
|
||||
"inputs": "Tulot"
|
||||
},
|
||||
"conditions": {
|
||||
"add": "Lisää ehto",
|
||||
"delete": "Poista",
|
||||
@@ -1322,9 +1232,7 @@
|
||||
},
|
||||
"time": {
|
||||
"at": "Kellonaikana",
|
||||
"label": "Aika",
|
||||
"type_input": "Päivämäärä- ja aika-apurin arvo",
|
||||
"type_value": "Kiinteä aika"
|
||||
"label": "Aika"
|
||||
},
|
||||
"webhook": {
|
||||
"label": "Webhook",
|
||||
@@ -1360,40 +1268,6 @@
|
||||
"only_editable": "Vain automaatiot tiedostossa automations.yaml ovat muokattavissa.",
|
||||
"pick_automation": "Valitse automaatio, jota haluat muokata",
|
||||
"show_info_automation": "Näytä tietoja automaatiosta"
|
||||
},
|
||||
"thingtalk": {
|
||||
"create": "Luo automaatio",
|
||||
"link_devices": {
|
||||
"header": "Upeaa! Nyt meidän on linkitettävä joitakin laitteita",
|
||||
"unknown_placeholder": "Tuntematon paikkamerkki"
|
||||
},
|
||||
"task_selection": {
|
||||
"error_empty": "Kirjoita komento tai napauta ohita.",
|
||||
"error_unsupported": "Emme voineet luoda automaatiota sille (vielä?).",
|
||||
"for_example": "Esimerkiksi:",
|
||||
"header": "Luo uusi automaatio",
|
||||
"introduction": "Kirjoita alle, mitä tämän automaation pitäisi tehdä, ja yritämme muuntaa sen Home Assistant -automaatioksi.",
|
||||
"language_note": "Huomautus: Toistaiseksi tuetaan vain englantia."
|
||||
}
|
||||
}
|
||||
},
|
||||
"blueprint": {
|
||||
"add": {
|
||||
"community_forums": "yhteisön keskustelualueet",
|
||||
"file_name": "Blueprint polku",
|
||||
"import_introduction_link": "Voit tuoda muiden käyttäjien piirustuksia Githubista ja {community_link}. Kirjoita piirustuksen URL-osoite alle.",
|
||||
"raw_blueprint": "Piirustuksen sisältö",
|
||||
"save_btn": "Tuo pohjapiirros"
|
||||
},
|
||||
"overview": {
|
||||
"delete_blueprint": "Poista pohjapiirros",
|
||||
"discover_more": "Löydä lisää piirustuksia",
|
||||
"headers": {
|
||||
"domain": "Toimialue",
|
||||
"file_name": "Tiedoston nimi",
|
||||
"name": "Nimi"
|
||||
},
|
||||
"use_blueprint": "Luo automaatio"
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
@@ -1633,7 +1507,6 @@
|
||||
"unknown_condition": "Tuntematon ehto"
|
||||
},
|
||||
"create": "Luo automaatio laitteella",
|
||||
"create_disable": "Automaatiota ei voi luoda käytöstä poistetulla laitteella",
|
||||
"no_automations": "Ei automaatioita",
|
||||
"no_device_automations": "Tälle laitteelle ei ole käytettävissä automaatioita.",
|
||||
"triggers": {
|
||||
@@ -1662,15 +1535,6 @@
|
||||
"description": "Hallitse yhdistettyjä laitteita.",
|
||||
"device_info": "Laitteen tiedot",
|
||||
"device_not_found": "Laitetta ei löydy.",
|
||||
"disabled": "Poistettu käytöstä",
|
||||
"disabled_by": {
|
||||
"config_entry": "Asetus",
|
||||
"integration": "Integraatio",
|
||||
"user": "Käyttäjä"
|
||||
},
|
||||
"enabled_cause": "Laite on poistettu käytöstä. Syy: {cause} .",
|
||||
"enabled_description": "Poistettuja laitteita ei näytetä, ja laitteeseen kuuluvat kohteet poistetaan käytöstä, eikä niitä lisätä Home Assistantiin.",
|
||||
"enabled_label": "Ota laite käyttöön",
|
||||
"entities": {
|
||||
"add_entities_lovelace": "Lisää Lovelace näkymään",
|
||||
"disabled_entities": "{count} {count, plural,\n one {kohde}\n other {kohdetta}\n}",
|
||||
@@ -1680,24 +1544,14 @@
|
||||
},
|
||||
"name": "Nimi",
|
||||
"no_devices": "Ei laitteita",
|
||||
"picker": {
|
||||
"filter": {
|
||||
"filter": "Suodatin",
|
||||
"show_all": "Näytä kaikki",
|
||||
"show_disabled": "Näytä käytöstä poistetut laitteet"
|
||||
},
|
||||
"search": "Etsi laitteita"
|
||||
},
|
||||
"scene": {
|
||||
"create": "Luo tilanne laitteella",
|
||||
"create_disable": "Kohtausta ei voi luoda käytöstä poistetulla laitteella",
|
||||
"no_scenes": "Ei tilanteita",
|
||||
"scenes": "Tilanteet"
|
||||
},
|
||||
"scenes": "Tilanteet",
|
||||
"script": {
|
||||
"create": "Luo tilanne laitteella",
|
||||
"create_disable": "Skriptiä ei voi luoda käytöstä poistetulla laitteella",
|
||||
"no_scripts": "Ei skriptejä",
|
||||
"scripts": "Skriptit"
|
||||
},
|
||||
@@ -1729,7 +1583,6 @@
|
||||
},
|
||||
"header": "Kohteet",
|
||||
"headers": {
|
||||
"area": "Alue",
|
||||
"entity_id": "Kohde ID",
|
||||
"integration": "Integraatio",
|
||||
"name": "Nimi",
|
||||
@@ -1791,8 +1644,6 @@
|
||||
"info": {
|
||||
"built_using": "Rakennettu käyttäen",
|
||||
"caption": "Tiedot",
|
||||
"copy_github": "GitHubille",
|
||||
"copy_raw": "Raaka teksti",
|
||||
"custom_uis": "Mukautetut käyttöliittymät:",
|
||||
"description": "Tietoja Home Assistant -asennuksesta",
|
||||
"developed_by": "Kehittänyt joukko mahtavia ihmisiä.",
|
||||
@@ -1808,42 +1659,6 @@
|
||||
"server": "palvelin",
|
||||
"source": "Lähde:",
|
||||
"system_health_error": "Järjestelmän kunto-komponenttia ei ole ladattu. Lisää 'system_health:' kohteeseen configuration.yaml",
|
||||
"system_health": {
|
||||
"checks": {
|
||||
"cloud": {
|
||||
"alexa_enabled": "Alexa käytössä",
|
||||
"can_reach_cert_server": "Tavoita varmennepalvelin",
|
||||
"can_reach_cloud": "Saavuta Home Assistant Cloud",
|
||||
"can_reach_cloud_auth": "Saavuta todennuspalvelin",
|
||||
"google_enabled": "Google käytössä",
|
||||
"logged_in": "Kirjautunut sisään",
|
||||
"relayer_connected": "Rele yhdistetty",
|
||||
"remote_connected": "Kaukosäädin yhdistetty",
|
||||
"remote_enabled": "Kaukosäädin käytössä",
|
||||
"subscription_expiration": "Tilauksen vanhentuminen"
|
||||
},
|
||||
"homeassistant": {
|
||||
"arch": "CPU-arkkitehtuuri",
|
||||
"dev": "Kehitys",
|
||||
"docker": "Docker",
|
||||
"hassio": "HassOS",
|
||||
"installation_type": "Asennustyyppi",
|
||||
"os_name": "Käyttöjärjestelmän nimi",
|
||||
"os_version": "Käyttöjärjestelmän versio",
|
||||
"python_version": "Python-versio",
|
||||
"timezone": "Aikavyöhyke",
|
||||
"version": "Versio",
|
||||
"virtualenv": "Virtuaalinen ympäristö"
|
||||
},
|
||||
"lovelace": {
|
||||
"dashboards": "Kojelaudat",
|
||||
"mode": "Tila",
|
||||
"resources": "Resurssit"
|
||||
}
|
||||
},
|
||||
"manage": "Hallitse",
|
||||
"more_info": "lisätietoja"
|
||||
},
|
||||
"title": "Tiedot"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
@@ -1877,7 +1692,6 @@
|
||||
"reload_restart_confirm": "Viimeistele tämän integroinnin uudelleenlataaminen käynnistämällä Home Assistant uudelleen",
|
||||
"rename": "Nimeä uudelleen",
|
||||
"restart_confirm": "Käynnistä Home Assistant uudellen viimeistelläksesi tämän integraation poistamisen",
|
||||
"services": "{count} {count, plural,\n one {palvelut}\n other {palvelua}\n}",
|
||||
"settings_button": "Muokkaa {integration}-asetuksia",
|
||||
"system_options": "Järjestelmäasetukset",
|
||||
"system_options_button": "{integration}-järjestelmän asetukset",
|
||||
@@ -2095,7 +1909,6 @@
|
||||
"product_manual": "Tuotteen käyttöopas"
|
||||
},
|
||||
"node_query_stages": {
|
||||
"associations": "Päivitetään yhdistysryhmiä ja jäsenyyksiä",
|
||||
"cacheload": "Ladataan tietoja OpenZWave-välimuistitiedostosta. Akkukäyttöiset solmut pysyvät tässä vaiheessa, kunnes solmu herää.",
|
||||
"complete": "Haastatteluprosessi on valmis",
|
||||
"configuration": "Noudetaan solmun määritysarvot",
|
||||
@@ -2145,7 +1958,6 @@
|
||||
},
|
||||
"services": {
|
||||
"add_node": "Lisää solmu",
|
||||
"cancel_command": "Peruuta komento",
|
||||
"remove_node": "Poista solmu"
|
||||
}
|
||||
},
|
||||
@@ -2261,8 +2073,6 @@
|
||||
},
|
||||
"picker": {
|
||||
"add_script": "Lisää skripti",
|
||||
"duplicate": "Kopioi",
|
||||
"duplicate_script": "Kopioi skripti",
|
||||
"edit_script": "Muokkaa skriptiä",
|
||||
"header": "Skriptieditori",
|
||||
"headers": {
|
||||
@@ -2309,7 +2119,6 @@
|
||||
"script": "Lataa skriptit uudelleen",
|
||||
"smtp": "Lataa smtp-ilmoituspalvelut uudelleen",
|
||||
"statistics": "Lataa tilastoentiteetit uudelleen",
|
||||
"telegram": "Päivitä Telegram-ilmoituspalvelut",
|
||||
"template": "Lataa mallientiteetiteetit uudelleen",
|
||||
"trend": "Lataa trendientiteetiteetit uudelleen",
|
||||
"universal": "Lataa universaali mediasoittimen entiteetit uudelleen",
|
||||
@@ -2336,7 +2145,6 @@
|
||||
"add_tag": "Lisää tunniste",
|
||||
"automation_title": "Tunniste {name} skannataan",
|
||||
"caption": "Tunnisteet",
|
||||
"confirm_remove_title": "Poista tägi?",
|
||||
"create_automation": "Automaation luominen tunnisteella",
|
||||
"description": "Hallitse tunnisteita",
|
||||
"detail": {
|
||||
@@ -2377,7 +2185,6 @@
|
||||
"editor": {
|
||||
"activate_user": "Aktivoi käyttäjä",
|
||||
"active": "Aktiivinen",
|
||||
"active_tooltip": "Määrittää, voiko käyttäjä kirjautua sisään",
|
||||
"admin": "Järjestelmänvalvoja",
|
||||
"caption": "Näytä käyttäjä",
|
||||
"change_password": "Vaihda salasana",
|
||||
@@ -2394,24 +2201,18 @@
|
||||
"system_generated_users_not_editable": "Järjestelmän luomia käyttäjiä ei voi päivittää.",
|
||||
"system_generated_users_not_removable": "Järjestelmän luomia käyttäjiä ei voi poistaa.",
|
||||
"unnamed_user": "Nimeämätön käyttäjä",
|
||||
"update_user": "Päivitä",
|
||||
"username": "Käyttäjätunnus"
|
||||
"update_user": "Päivitä"
|
||||
},
|
||||
"picker": {
|
||||
"add_user": "Lisää käyttäjä",
|
||||
"headers": {
|
||||
"group": "Ryhmä",
|
||||
"is_active": "Aktiivinen",
|
||||
"is_owner": "Omistaja",
|
||||
"name": "Nimi",
|
||||
"system": "Järjestelmä",
|
||||
"username": "Käyttäjätunnus"
|
||||
"system": "Järjestelmä"
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "Käyttäjät-ryhmä on vielä kesken. Käyttäjä ei voi hallita Home Assistantia käyttöliittymän kautta. Auditoimme edelleen kaikkia hallinta-API-päätepisteitä varmistaaksemme, että ne rajoittavat pääsyn oikein."
|
||||
},
|
||||
"zha": {
|
||||
"add_device": "Lisää laite",
|
||||
"add_device_page": {
|
||||
"discovered_text": "Laitteet tulevat tänne, kun ne löydetään.",
|
||||
"discovery_text": "Löydetyt laitteet näkyvät täällä. Noudata laitteen (laitteiden) ohjeita ja aseta laite pariliitostilaan.",
|
||||
@@ -2457,16 +2258,6 @@
|
||||
"value": "Arvo"
|
||||
},
|
||||
"description": "Zigbee kotiautomaation verkonhallinta",
|
||||
"device_pairing_card": {
|
||||
"CONFIGURED": "Määritys valmis",
|
||||
"CONFIGURED_status_text": "Alustetaan",
|
||||
"INITIALIZED": "Alustus on valmis",
|
||||
"INITIALIZED_status_text": "Laite on käyttövalmis",
|
||||
"INTERVIEW_COMPLETE": "Haastattelu valmis",
|
||||
"INTERVIEW_COMPLETE_status_text": "Määrittää",
|
||||
"PAIRED": "Laite löydetty",
|
||||
"PAIRED_status_text": "Haastattelun aloittaminen"
|
||||
},
|
||||
"devices": {
|
||||
"header": "Zigbee-kotiautomaatio - laite"
|
||||
},
|
||||
@@ -2482,7 +2273,6 @@
|
||||
"unbind_button_label": "Pura ryhmän sidonta"
|
||||
},
|
||||
"groups": {
|
||||
"add_group": "Lisää ryhmä",
|
||||
"add_members": "Lisää jäseniä",
|
||||
"adding_members": "Lisätään jäseniä",
|
||||
"caption": "Ryhmät",
|
||||
@@ -2525,11 +2315,7 @@
|
||||
"hint_wakeup": "Joissakin laitteissa, kuten Xiaomi-antureissa, on herätyspainike, jota voit painaa 5 sekunnin välein, jotka pitävät laitteet hereillä, kun olet vuorovaikutuksessa niiden kanssa.",
|
||||
"introduction": "Suorita ZHA-komennot, jotka vaikuttavat yhteen laitteeseen. Valitse laite nähdäksesi luettelon käytettävissä olevista komennoista."
|
||||
},
|
||||
"title": "Zigbee-kotiautomaatio",
|
||||
"visualization": {
|
||||
"caption": "Visualisointi",
|
||||
"header": "Verkon visualisointi"
|
||||
}
|
||||
"title": "Zigbee-kotiautomaatio"
|
||||
},
|
||||
"zone": {
|
||||
"add_zone": "Lisää vyöhyke",
|
||||
@@ -2925,10 +2711,6 @@
|
||||
"description": "Glance-kortti on hyödyllinen useiden anturien ryhmittelemiseksi kompaktiin yleiskuvaan.",
|
||||
"name": "Pikavilkaisu"
|
||||
},
|
||||
"grid": {
|
||||
"description": "Ruudukkokortin avulla voit näyttää useita kortteja ruudukossa.",
|
||||
"name": "Ruudukko"
|
||||
},
|
||||
"history-graph": {
|
||||
"description": "Historiakaavio-kortin avulla voit näyttää kaavion kullekin luettelossa olevalle kohteelle.",
|
||||
"name": "Historiakuvaaja"
|
||||
@@ -2949,9 +2731,6 @@
|
||||
"description": "Valokortti antaa sinun muuttaa valon kirkkautta.",
|
||||
"name": "Valo"
|
||||
},
|
||||
"logbook": {
|
||||
"name": "Lokikirja"
|
||||
},
|
||||
"map": {
|
||||
"dark_mode": "Tumma tila?",
|
||||
"default_zoom": "Oletuszoomaus",
|
||||
@@ -3024,18 +2803,11 @@
|
||||
"entity": "Kohde",
|
||||
"no_description": "Ei kuvausta saatavilla."
|
||||
},
|
||||
"common": {
|
||||
"add": "Lisää",
|
||||
"clear": "Tyhjennä",
|
||||
"edit": "Muokkaa",
|
||||
"none": "Ei mitään"
|
||||
},
|
||||
"edit_badges": {
|
||||
"panel_mode": "Näitä kylttejä ei näytetä, koska tämä näkymä on \"Paneelitilassa\"."
|
||||
},
|
||||
"edit_card": {
|
||||
"add": "Lisää kortti",
|
||||
"clear": "Tyhjennä",
|
||||
"confirm_cancel": "Haluatko varmasti peruuttaa?",
|
||||
"delete": "Poista kortti",
|
||||
"duplicate": "Kopioi kortti",
|
||||
@@ -3076,22 +2848,6 @@
|
||||
}
|
||||
},
|
||||
"header": "Muokkaa käyttöliittymää",
|
||||
"header-footer": {
|
||||
"choose_header_footer": "Valitse {type}",
|
||||
"footer": "Alatunniste",
|
||||
"header": "Otsikko",
|
||||
"types": {
|
||||
"buttons": {
|
||||
"name": "Painikkeet"
|
||||
},
|
||||
"graph": {
|
||||
"name": "Kaavio"
|
||||
},
|
||||
"picture": {
|
||||
"name": "Kuva"
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"open": "Avaa Lovelace-valikko",
|
||||
"raw_editor": "Raaka konfigurointieditori"
|
||||
@@ -3136,13 +2892,6 @@
|
||||
"dashboard_label": "Kojelauta",
|
||||
"header": "Valitse näkymä"
|
||||
},
|
||||
"sub-element-editor": {
|
||||
"types": {
|
||||
"footer": "Alatunnisteen muokkausohjelma",
|
||||
"header": "Otsikkoeditori",
|
||||
"row": "Kohderivieditori"
|
||||
}
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Lisää Lovelace-käyttöliittymään",
|
||||
"create_own": "Valitse toinen kortti",
|
||||
@@ -3392,13 +3141,10 @@
|
||||
"change_password": {
|
||||
"confirm_new_password": "Vahvista uusi salasana",
|
||||
"current_password": "Nykyinen salasana",
|
||||
"error_new_is_old": "Uuden salasanan on oltava eri kuin nykyinen salasana",
|
||||
"error_new_mismatch": "Annetut uudet salasanat eivät täsmää",
|
||||
"error_required": "Pakollinen",
|
||||
"header": "Vaihda salasana",
|
||||
"new_password": "Uusi salasana",
|
||||
"submit": "Lähetä",
|
||||
"success": "Salasanan vaihtaminen onnistui"
|
||||
"submit": "Lähetä"
|
||||
},
|
||||
"current_user": "Olet tällä hetkellä kirjautuneena tunnuksella {fullName}.",
|
||||
"customize_sidebar": {
|
||||
@@ -3411,10 +3157,6 @@
|
||||
"dropdown_label": "Kojelauta",
|
||||
"header": "Kojelauta"
|
||||
},
|
||||
"enable_shortcuts": {
|
||||
"description": "Ota käyttöön tai poista käytöstä pikanäppäimet eri toimintojen suorittamiseksi käyttöliittymässä.",
|
||||
"header": "Pikanäppäimet"
|
||||
},
|
||||
"force_narrow": {
|
||||
"description": "Tämä piilottaa oletusarvoisesti sivupalkin, joka muistuttaa mobiilikokemusta.",
|
||||
"header": "Piilota sivupalkki aina"
|
||||
@@ -3459,10 +3201,6 @@
|
||||
"header": "Monivaiheisen tunnistautumisen moduulit"
|
||||
},
|
||||
"push_notifications": {
|
||||
"add_device_prompt": {
|
||||
"input_label": "Laitteen nimi",
|
||||
"title": "Miksi tätä laitetta tulisi kutsua?"
|
||||
},
|
||||
"description": "Lähetä ilmoitukset tälle laitteelle.",
|
||||
"error_load_platform": "Määritä notify.html5-komponentti",
|
||||
"error_use_https": "Vaatii SSL suojauksen",
|
||||
@@ -3504,9 +3242,6 @@
|
||||
"header": "Värinä"
|
||||
}
|
||||
},
|
||||
"shopping_list": {
|
||||
"start_conversation": "Aloita keskustelu"
|
||||
},
|
||||
"shopping-list": {
|
||||
"add_item": "Lisää tavara",
|
||||
"clear_completed": "Poista valmiit",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user