mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-22 16:56:35 +00:00
commit
85990c20ed
13
package.json
13
package.json
@ -17,8 +17,9 @@
|
||||
"author": "Paulus Schoutsen <Paulus@PaulusSchoutsen.nl> (http://paulusschoutsen.nl)",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@material/mwc-button": "^0.5.0",
|
||||
"@material/mwc-ripple": "^0.5.0",
|
||||
"@material/mwc-base": "^0.6.0",
|
||||
"@material/mwc-button": "^0.6.0",
|
||||
"@material/mwc-ripple": "^0.6.0",
|
||||
"@mdi/svg": "3.5.95",
|
||||
"@polymer/app-layout": "^3.0.2",
|
||||
"@polymer/app-localize-behavior": "^3.0.1",
|
||||
@ -77,13 +78,13 @@
|
||||
"fuse.js": "^3.4.4",
|
||||
"google-timezones-json": "^1.0.2",
|
||||
"hls.js": "^0.12.4",
|
||||
"home-assistant-js-websocket": "^4.2.1",
|
||||
"home-assistant-js-websocket": "^4.2.2",
|
||||
"intl-messageformat": "^2.2.0",
|
||||
"jquery": "^3.3.1",
|
||||
"js-yaml": "^3.13.0",
|
||||
"leaflet": "^1.4.0",
|
||||
"lit-element": "^2.1.0",
|
||||
"lit-html": "^1.0.0",
|
||||
"lit-element": "^2.2.0",
|
||||
"lit-html": "^1.1.0",
|
||||
"marked": "^0.6.1",
|
||||
"mdn-polyfills": "^5.16.0",
|
||||
"memoize-one": "^5.0.2",
|
||||
@ -169,7 +170,7 @@
|
||||
"workbox-webpack-plugin": "^4.1.1"
|
||||
},
|
||||
"resolutions": {
|
||||
"@webcomponents/webcomponentsjs": "^2.2.7",
|
||||
"@webcomponents/webcomponentsjs": "^2.2.10",
|
||||
"@vaadin/vaadin-lumo-styles": "^1.4.2"
|
||||
},
|
||||
"main": "src/home-assistant.js",
|
||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20190604.0",
|
||||
version="20190614.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
@ -4,6 +4,9 @@ import "@polymer/paper-toast/paper-toast";
|
||||
const PaperToast = customElements.get("paper-toast");
|
||||
|
||||
export class HaToast extends PaperToast {
|
||||
private _resizeListener?: (obj: { matches: boolean }) => unknown;
|
||||
private _mediaq?: MediaQueryList;
|
||||
|
||||
public connectedCallback() {
|
||||
super.connectedCallback();
|
||||
|
||||
@ -12,13 +15,13 @@ export class HaToast extends PaperToast {
|
||||
this.classList.toggle("fit-bottom", ev.matches);
|
||||
this._mediaq = window.matchMedia("(max-width: 599px");
|
||||
}
|
||||
this._mediaq.addListener(this._resizeListener);
|
||||
this._resizeListener(this._mediaq);
|
||||
this._mediaq!.addListener(this._resizeListener);
|
||||
this._resizeListener(this._mediaq!);
|
||||
}
|
||||
|
||||
public disconnectedCallback() {
|
||||
super.disconnectedCallback();
|
||||
this._mediaq.removeListener(this._resizeListener);
|
||||
this._mediaq!.removeListener(this._resizeListener!);
|
||||
}
|
||||
}
|
||||
|
||||
|
10
src/data/alexa.ts
Normal file
10
src/data/alexa.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { HomeAssistant } from "../types";
|
||||
|
||||
export interface AlexaEntity {
|
||||
entity_id: string;
|
||||
display_categories: string[];
|
||||
interfaces: string[];
|
||||
}
|
||||
|
||||
export const fetchCloudAlexaEntities = (hass: HomeAssistant) =>
|
||||
hass.callWS<AlexaEntity[]>({ type: "cloud/alexa/entities" });
|
@ -13,6 +13,10 @@ export interface GoogleEntityConfig {
|
||||
disable_2fa?: boolean;
|
||||
}
|
||||
|
||||
export interface AlexaEntityConfig {
|
||||
should_expose?: boolean;
|
||||
}
|
||||
|
||||
export interface CertificateInformation {
|
||||
common_name: string;
|
||||
expire_date: string;
|
||||
@ -28,6 +32,10 @@ export interface CloudPreferences {
|
||||
google_entity_configs: {
|
||||
[entityId: string]: GoogleEntityConfig;
|
||||
};
|
||||
alexa_entity_configs: {
|
||||
[entityId: string]: AlexaEntityConfig;
|
||||
};
|
||||
alexa_report_state: boolean;
|
||||
}
|
||||
|
||||
export type CloudStatusLoggedIn = CloudStatusBase & {
|
||||
@ -35,7 +43,6 @@ export type CloudStatusLoggedIn = CloudStatusBase & {
|
||||
google_entities: EntityFilter;
|
||||
google_domains: string[];
|
||||
alexa_entities: EntityFilter;
|
||||
alexa_domains: string[];
|
||||
prefs: CloudPreferences;
|
||||
remote_domain: string | undefined;
|
||||
remote_connected: boolean;
|
||||
@ -55,12 +62,6 @@ export interface CloudWebhook {
|
||||
managed?: boolean;
|
||||
}
|
||||
|
||||
export interface GoogleEntity {
|
||||
entity_id: string;
|
||||
traits: string[];
|
||||
might_2fa: boolean;
|
||||
}
|
||||
|
||||
export const fetchCloudStatus = (hass: HomeAssistant) =>
|
||||
hass.callWS<CloudStatus>({ type: "cloud/status" });
|
||||
|
||||
@ -94,6 +95,7 @@ export const updateCloudPref = (
|
||||
prefs: {
|
||||
google_enabled?: CloudPreferences["google_enabled"];
|
||||
alexa_enabled?: CloudPreferences["alexa_enabled"];
|
||||
alexa_report_state?: CloudPreferences["alexa_report_state"];
|
||||
google_secure_devices_pin?: CloudPreferences["google_secure_devices_pin"];
|
||||
}
|
||||
) =>
|
||||
@ -102,9 +104,6 @@ export const updateCloudPref = (
|
||||
...prefs,
|
||||
});
|
||||
|
||||
export const fetchCloudGoogleEntities = (hass: HomeAssistant) =>
|
||||
hass.callWS<GoogleEntity[]>({ type: "cloud/google_assistant/entities" });
|
||||
|
||||
export const updateCloudGoogleEntityConfig = (
|
||||
hass: HomeAssistant,
|
||||
entityId: string,
|
||||
@ -118,3 +117,14 @@ export const updateCloudGoogleEntityConfig = (
|
||||
|
||||
export const cloudSyncGoogleAssistant = (hass: HomeAssistant) =>
|
||||
hass.callApi("POST", "cloud/google_actions/sync");
|
||||
|
||||
export const updateCloudAlexaEntityConfig = (
|
||||
hass: HomeAssistant,
|
||||
entityId: string,
|
||||
values: AlexaEntityConfig
|
||||
) =>
|
||||
hass.callWS<AlexaEntityConfig>({
|
||||
type: "cloud/alexa/entities/update",
|
||||
entity_id: entityId,
|
||||
...values,
|
||||
});
|
||||
|
@ -10,7 +10,7 @@ export interface DeviceRegistryEntry {
|
||||
model?: string;
|
||||
name?: string;
|
||||
sw_version?: string;
|
||||
hub_device_id?: string;
|
||||
via_device_id?: string;
|
||||
area_id?: string;
|
||||
name_by_user?: string;
|
||||
}
|
||||
|
10
src/data/google_assistant.ts
Normal file
10
src/data/google_assistant.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { HomeAssistant } from "../types";
|
||||
|
||||
export interface GoogleEntity {
|
||||
entity_id: string;
|
||||
traits: string[];
|
||||
might_2fa: boolean;
|
||||
}
|
||||
|
||||
export const fetchCloudGoogleEntities = (hass: HomeAssistant) =>
|
||||
hass.callWS<GoogleEntity[]>({ type: "cloud/google_assistant/entities" });
|
@ -61,10 +61,10 @@ export type ActionConfig =
|
||||
| NoActionConfig;
|
||||
|
||||
export const fetchConfig = (
|
||||
hass: HomeAssistant,
|
||||
conn: Connection,
|
||||
force: boolean
|
||||
): Promise<LovelaceConfig> =>
|
||||
hass.callWS({
|
||||
conn.sendMessagePromise({
|
||||
type: "lovelace/config",
|
||||
force,
|
||||
});
|
||||
@ -82,3 +82,7 @@ export const subscribeLovelaceUpdates = (
|
||||
conn: Connection,
|
||||
onChange: () => void
|
||||
) => conn.subscribeEvents(onChange, "lovelace_updated");
|
||||
|
||||
export interface WindowWithLovelaceProm extends Window {
|
||||
llConfProm?: Promise<LovelaceConfig>;
|
||||
}
|
||||
|
@ -75,8 +75,9 @@ class StepFlowExternal extends LitElement {
|
||||
return;
|
||||
}
|
||||
|
||||
const step = await fetchConfigFlow(this.hass, this.step.flow_id);
|
||||
fireEvent(this, "flow-update", { step });
|
||||
fireEvent(this, "flow-update", {
|
||||
stepPromise: fetchConfigFlow(this.hass, this.step.flow_id),
|
||||
});
|
||||
},
|
||||
"data_entry_flow_progressed"
|
||||
);
|
||||
|
@ -15,6 +15,7 @@ import { subscribeThemes } from "../data/ws-themes";
|
||||
import { subscribeUser } from "../data/ws-user";
|
||||
import { HomeAssistant } from "../types";
|
||||
import { hassUrl } from "../data/auth";
|
||||
import { fetchConfig, WindowWithLovelaceProm } from "../data/lovelace";
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
@ -61,6 +62,9 @@ const connProm = async (auth) => {
|
||||
}
|
||||
};
|
||||
|
||||
if (__DEV__) {
|
||||
performance.mark("hass-start");
|
||||
}
|
||||
window.hassConnection = authProm().then(connProm);
|
||||
|
||||
// Start fetching some of the data that we will need.
|
||||
@ -74,6 +78,10 @@ window.hassConnection.then(({ conn }) => {
|
||||
subscribePanels(conn, noop);
|
||||
subscribeThemes(conn, noop);
|
||||
subscribeUser(conn, noop);
|
||||
|
||||
if (location.pathname === "/" || location.pathname.startsWith("/lovelace/")) {
|
||||
(window as WindowWithLovelaceProm).llConfProm = fetchConfig(conn, false);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("error", (e) => {
|
||||
|
@ -2,7 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Home Assistant</title>
|
||||
<link rel="preload" href="<%= latestPageJS %>" as="script" crossorigin />
|
||||
<link rel="preload" href="<%= latestPageJS %>" as="script" crossorigin="use-credentials" />
|
||||
<link
|
||||
rel="preload"
|
||||
href="/static/fonts/roboto/Roboto-Light.ttf"
|
||||
@ -47,7 +47,7 @@
|
||||
|
||||
<%= renderTemplate('_js_base') %>
|
||||
|
||||
<script type="module">
|
||||
<script type="module" crossorigin="use-credentials">
|
||||
import "<%= latestPageJS %>";
|
||||
import "<%= latestHassIconsJS %>";
|
||||
window.providersPromise = fetch("/auth/providers", {
|
||||
|
@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="preload" href="<%= latestCoreJS %>" as="script" crossorigin />
|
||||
<link rel="preload" href="<%= latestCoreJS %>" as="script" crossorigin="use-credentials" />
|
||||
<link
|
||||
rel="preload"
|
||||
href="/static/fonts/roboto/Roboto-Regular.ttf"
|
||||
@ -59,7 +59,7 @@
|
||||
|
||||
<%= renderTemplate('_js_base') %>
|
||||
|
||||
<script type="module">
|
||||
<script type="module" crossorigin="use-credentials">
|
||||
import "<%= latestCoreJS %>";
|
||||
import "<%= latestAppJS %>";
|
||||
import "<%= latestHassIconsJS %>";
|
||||
|
@ -2,7 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Home Assistant</title>
|
||||
<link rel="preload" href="<%= latestPageJS %>" as="script" crossorigin />
|
||||
<link rel="preload" href="<%= latestPageJS %>" as="script" crossorigin="use-credentials" />
|
||||
<link
|
||||
rel="preload"
|
||||
href="/static/fonts/roboto/Roboto-Light.ttf"
|
||||
@ -49,7 +49,7 @@
|
||||
|
||||
<%= renderTemplate('_js_base') %>
|
||||
|
||||
<script type="module">
|
||||
<script type="module" crossorigin="use-credentials">
|
||||
import "<%= latestPageJS %>";
|
||||
import "<%= latestHassIconsJS %>";
|
||||
window.stepsPromise = fetch("/api/onboarding", {
|
||||
|
@ -22,6 +22,8 @@ export const litLocalizeLiteMixin = <T extends LitElement>(
|
||||
): Constructor<T & LitLocalizeLiteMixin> =>
|
||||
// @ts-ignore
|
||||
class extends localizeLiteBaseMixin(superClass) {
|
||||
public localize: LocalizeFunc;
|
||||
|
||||
static get properties(): PropertyDeclarations {
|
||||
return {
|
||||
localize: {},
|
||||
@ -44,8 +46,8 @@ export const litLocalizeLiteMixin = <T extends LitElement>(
|
||||
this._initializeLocalizeLite();
|
||||
this.localize = computeLocalize(
|
||||
this.constructor.prototype,
|
||||
this.language,
|
||||
this.resources
|
||||
this.language!,
|
||||
this.resources!
|
||||
);
|
||||
}
|
||||
|
||||
@ -57,8 +59,8 @@ export const litLocalizeLiteMixin = <T extends LitElement>(
|
||||
) {
|
||||
this.localize = computeLocalize(
|
||||
this.constructor.prototype,
|
||||
this.language,
|
||||
this.resources
|
||||
this.language!,
|
||||
this.resources!
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -2,12 +2,17 @@
|
||||
* Lite base mixin to add localization without depending on the Hass object.
|
||||
*/
|
||||
import { getTranslation } from "../util/hass-translation";
|
||||
import { Resources } from "../types";
|
||||
|
||||
/**
|
||||
* @polymerMixin
|
||||
*/
|
||||
export const localizeLiteBaseMixin = (superClass) =>
|
||||
class extends superClass {
|
||||
public resources?: Resources;
|
||||
public language?: string;
|
||||
public translationFragment?: string;
|
||||
|
||||
protected _initializeLocalizeLite() {
|
||||
if (this.resources) {
|
||||
return;
|
||||
@ -36,8 +41,8 @@ export const localizeLiteBaseMixin = (superClass) =>
|
||||
|
||||
private async _downloadResources() {
|
||||
const { language, data } = await getTranslation(
|
||||
this.translationFragment,
|
||||
this.language
|
||||
this.translationFragment!,
|
||||
this.language!
|
||||
);
|
||||
this.resources = {
|
||||
[language]: data,
|
||||
|
@ -4,30 +4,27 @@ import "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/buttons/ha-call-api-button";
|
||||
import "../../../layouts/hass-subpage";
|
||||
import "../../../resources/ha-style";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/buttons/ha-call-api-button";
|
||||
import "../../../../layouts/hass-subpage";
|
||||
import "../../../../resources/ha-style";
|
||||
|
||||
import "../ha-config-section";
|
||||
import "../../ha-config-section";
|
||||
import "./cloud-webhooks";
|
||||
|
||||
import formatDateTime from "../../../common/datetime/format_date_time";
|
||||
import { EventsMixin } from "../../../mixins/events-mixin";
|
||||
import LocalizeMixin from "../../../mixins/localize-mixin";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { fetchCloudSubscriptionInfo } from "../../../data/cloud";
|
||||
import formatDateTime from "../../../../common/datetime/format_date_time";
|
||||
import { EventsMixin } from "../../../../mixins/events-mixin";
|
||||
import LocalizeMixin from "../../../../mixins/localize-mixin";
|
||||
import { fetchCloudSubscriptionInfo } from "../../../../data/cloud";
|
||||
import "./cloud-alexa-pref";
|
||||
import "./cloud-google-pref";
|
||||
import "./cloud-remote-pref";
|
||||
|
||||
let registeredWebhookDialog = false;
|
||||
|
||||
/*
|
||||
* @appliesMixin EventsMixin
|
||||
* @appliesMixin LocalizeMixin
|
||||
*/
|
||||
class HaConfigCloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
class CloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="iron-flex ha-style">
|
||||
@ -163,20 +160,6 @@ class HaConfigCloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
this._fetchSubscriptionInfo();
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
|
||||
if (!registeredWebhookDialog) {
|
||||
registeredWebhookDialog = true;
|
||||
fireEvent(this, "register-dialog", {
|
||||
dialogShowEvent: "manage-cloud-webhook",
|
||||
dialogTag: "cloud-webhook-manage-dialog",
|
||||
dialogImport: () =>
|
||||
import(/* webpackChunkName: "cloud-webhook-manage-dialog" */ "./cloud-webhook-manage-dialog"),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_computeRemoteConnected(connected) {
|
||||
return connected ? "Connected" : "Not Connected";
|
||||
}
|
||||
@ -219,4 +202,4 @@ class HaConfigCloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-config-cloud-account", HaConfigCloudAccount);
|
||||
customElements.define("cloud-account", CloudAccount);
|
@ -11,12 +11,11 @@ import "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
// tslint:disable-next-line
|
||||
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../../components/ha-card";
|
||||
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import "./cloud-exposed-entities";
|
||||
import { CloudStatusLoggedIn, updateCloudPref } from "../../../data/cloud";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud";
|
||||
|
||||
export class CloudAlexaPref extends LitElement {
|
||||
public hass?: HomeAssistant;
|
||||
@ -34,13 +33,13 @@ export class CloudAlexaPref extends LitElement {
|
||||
return html``;
|
||||
}
|
||||
|
||||
const enabled = this.cloudStatus!.prefs.alexa_enabled;
|
||||
const { alexa_enabled, alexa_report_state } = this.cloudStatus!.prefs;
|
||||
|
||||
return html`
|
||||
<ha-card header="Alexa">
|
||||
<paper-toggle-button
|
||||
.checked="${enabled}"
|
||||
@change="${this._toggleChanged}"
|
||||
.checked=${alexa_enabled}
|
||||
@change=${this._enabledToggleChanged}
|
||||
></paper-toggle-button>
|
||||
<div class="card-content">
|
||||
With the Alexa integration for Home Assistant Cloud you'll be able to
|
||||
@ -63,22 +62,33 @@ export class CloudAlexaPref extends LitElement {
|
||||
>This integration requires an Alexa-enabled device like the Amazon
|
||||
Echo.</em
|
||||
>
|
||||
${enabled
|
||||
${alexa_enabled
|
||||
? html`
|
||||
<p>Exposed entities:</p>
|
||||
<cloud-exposed-entities
|
||||
.hass="${this.hass}"
|
||||
.filter="${this.cloudStatus!.alexa_entities}"
|
||||
.supportedDomains="${this.cloudStatus!.alexa_domains}"
|
||||
></cloud-exposed-entities>
|
||||
<h3>Enable State Reporting</h3>
|
||||
<p>
|
||||
If you enable state reporting, Home Assistant will sent
|
||||
<b>all</b> state changes of exposed entities to Amazon. This
|
||||
allows you to always see the latest states in the Alexa app
|
||||
and use the state changes to create routines.
|
||||
</p>
|
||||
<paper-toggle-button
|
||||
.checked=${alexa_report_state}
|
||||
@change=${this._reportToggleChanged}
|
||||
></paper-toggle-button>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<div class="spacer"></div>
|
||||
<a href="/config/cloud/alexa">
|
||||
<mwc-button>Manage Entities</mwc-button>
|
||||
</a>
|
||||
</div>
|
||||
</ha-card>
|
||||
`;
|
||||
}
|
||||
|
||||
private async _toggleChanged(ev) {
|
||||
private async _enabledToggleChanged(ev) {
|
||||
const toggle = ev.target as PaperToggleButtonElement;
|
||||
try {
|
||||
await updateCloudPref(this.hass!, { alexa_enabled: toggle.checked! });
|
||||
@ -88,6 +98,18 @@ export class CloudAlexaPref extends LitElement {
|
||||
}
|
||||
}
|
||||
|
||||
private async _reportToggleChanged(ev) {
|
||||
const toggle = ev.target as PaperToggleButtonElement;
|
||||
try {
|
||||
await updateCloudPref(this.hass!, {
|
||||
alexa_report_state: toggle.checked!,
|
||||
});
|
||||
fireEvent(this, "ha-refresh-cloud-status");
|
||||
} catch (err) {
|
||||
toggle.checked = !toggle.checked;
|
||||
}
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
a {
|
||||
@ -99,6 +121,21 @@ export class CloudAlexaPref extends LitElement {
|
||||
right: 8px;
|
||||
top: 32px;
|
||||
}
|
||||
.card-actions {
|
||||
display: flex;
|
||||
}
|
||||
.card-actions a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.spacer {
|
||||
flex-grow: 1;
|
||||
}
|
||||
h3 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
h3 + p {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
@ -10,13 +10,13 @@ import "@material/mwc-button";
|
||||
import "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
// tslint:disable-next-line
|
||||
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
import "../../../components/buttons/ha-call-api-button";
|
||||
import "../../../../components/buttons/ha-call-api-button";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../../components/ha-card";
|
||||
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { CloudStatusLoggedIn, updateCloudPref } from "../../../data/cloud";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud";
|
||||
import { PaperInputElement } from "@polymer/paper-input/paper-input";
|
||||
|
||||
export class CloudGooglePref extends LitElement {
|
@ -13,16 +13,16 @@ import "@polymer/paper-item/paper-item-body";
|
||||
// tslint:disable-next-line
|
||||
import { PaperToggleButtonElement } from "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../../components/ha-card";
|
||||
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import {
|
||||
connectCloudRemote,
|
||||
disconnectCloudRemote,
|
||||
CloudStatusLoggedIn,
|
||||
} from "../../../data/cloud";
|
||||
import { showCloudCertificateDialog } from "./show-dialog-cloud-certificate";
|
||||
} from "../../../../data/cloud";
|
||||
import { showCloudCertificateDialog } from "../dialog-cloud-certificate/show-dialog-cloud-certificate";
|
||||
|
||||
@customElement("cloud-remote-pref")
|
||||
export class CloudRemotePref extends LitElement {
|
@ -8,17 +8,17 @@ import "@polymer/paper-toggle-button/paper-toggle-button";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-item/paper-item-body";
|
||||
import "@polymer/paper-spinner/paper-spinner";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../../components/ha-card";
|
||||
|
||||
import { HomeAssistant, WebhookError } from "../../../types";
|
||||
import { Webhook, fetchWebhooks } from "../../../data/webhook";
|
||||
import { HomeAssistant, WebhookError } from "../../../../types";
|
||||
import { Webhook, fetchWebhooks } from "../../../../data/webhook";
|
||||
import {
|
||||
createCloudhook,
|
||||
deleteCloudhook,
|
||||
CloudWebhook,
|
||||
CloudStatusLoggedIn,
|
||||
} from "../../../data/cloud";
|
||||
import { showManageCloudhookDialog } from "./show-cloud-webhook-manage-dialog";
|
||||
} from "../../../../data/cloud";
|
||||
import { showManageCloudhookDialog } from "../dialog-manage-cloudhook/show-dialog-manage-cloudhook";
|
||||
|
||||
export class CloudWebhooks extends LitElement {
|
||||
public hass?: HomeAssistant;
|
364
src/panels/config/cloud/alexa/cloud-alexa.ts
Normal file
364
src/panels/config/cloud/alexa/cloud-alexa.ts
Normal file
@ -0,0 +1,364 @@
|
||||
import {
|
||||
LitElement,
|
||||
TemplateResult,
|
||||
html,
|
||||
CSSResult,
|
||||
css,
|
||||
customElement,
|
||||
property,
|
||||
} from "lit-element";
|
||||
import "@polymer/paper-toggle-button";
|
||||
import "@polymer/paper-icon-button";
|
||||
import "../../../../layouts/hass-subpage";
|
||||
import "../../../../layouts/hass-loading-screen";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/entity/state-info";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import {
|
||||
CloudStatusLoggedIn,
|
||||
CloudPreferences,
|
||||
updateCloudAlexaEntityConfig,
|
||||
AlexaEntityConfig,
|
||||
} from "../../../../data/cloud";
|
||||
import memoizeOne from "memoize-one";
|
||||
import {
|
||||
generateFilter,
|
||||
isEmptyFilter,
|
||||
EntityFilter,
|
||||
} from "../../../../common/entity/entity_filter";
|
||||
import { compare } from "../../../../common/string/compare";
|
||||
import computeStateName from "../../../../common/entity/compute_state_name";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { PolymerChangedEvent } from "../../../../polymer-types";
|
||||
import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler";
|
||||
import computeDomain from "../../../../common/entity/compute_domain";
|
||||
import { AlexaEntity, fetchCloudAlexaEntities } from "../../../../data/alexa";
|
||||
|
||||
const DEFAULT_CONFIG_EXPOSE = true;
|
||||
const IGNORE_INTERFACES = ["Alexa.EndpointHealth"];
|
||||
|
||||
const configIsExposed = (config: AlexaEntityConfig) =>
|
||||
config.should_expose === undefined
|
||||
? DEFAULT_CONFIG_EXPOSE
|
||||
: config.should_expose;
|
||||
|
||||
@customElement("cloud-alexa")
|
||||
class CloudAlexa extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property()
|
||||
public cloudStatus!: CloudStatusLoggedIn;
|
||||
|
||||
@property({ type: Boolean }) public narrow!: boolean;
|
||||
|
||||
@property() private _entities?: AlexaEntity[];
|
||||
|
||||
@property()
|
||||
private _entityConfigs: CloudPreferences["alexa_entity_configs"] = {};
|
||||
private _popstateSyncAttached = false;
|
||||
private _popstateReloadStatusAttached = false;
|
||||
private _isInitialExposed?: Set<string>;
|
||||
|
||||
private _getEntityFilterFunc = memoizeOne((filter: EntityFilter) =>
|
||||
generateFilter(
|
||||
filter.include_domains,
|
||||
filter.include_entities,
|
||||
filter.exclude_domains,
|
||||
filter.exclude_entities
|
||||
)
|
||||
);
|
||||
|
||||
protected render(): TemplateResult | void {
|
||||
if (this._entities === undefined) {
|
||||
return html`
|
||||
<hass-loading-screen></hass-loading-screen>
|
||||
`;
|
||||
}
|
||||
const emptyFilter = isEmptyFilter(this.cloudStatus.alexa_entities);
|
||||
const filterFunc = this._getEntityFilterFunc(
|
||||
this.cloudStatus.alexa_entities
|
||||
);
|
||||
|
||||
// We will only generate `isInitialExposed` during first render.
|
||||
// On each subsequent render we will use the same set so that cards
|
||||
// will not jump around when we change the exposed setting.
|
||||
const showInExposed = this._isInitialExposed || new Set();
|
||||
const trackExposed = this._isInitialExposed === undefined;
|
||||
|
||||
let selected = 0;
|
||||
|
||||
// On first render we decide which cards show in which category.
|
||||
// That way cards won't jump around when changing values.
|
||||
const exposedCards: TemplateResult[] = [];
|
||||
const notExposedCards: TemplateResult[] = [];
|
||||
|
||||
this._entities.forEach((entity) => {
|
||||
const stateObj = this.hass.states[entity.entity_id];
|
||||
const config = this._entityConfigs[entity.entity_id] || {};
|
||||
const isExposed = emptyFilter
|
||||
? configIsExposed(config)
|
||||
: filterFunc(entity.entity_id);
|
||||
if (isExposed) {
|
||||
selected++;
|
||||
|
||||
if (trackExposed) {
|
||||
showInExposed.add(entity.entity_id);
|
||||
}
|
||||
}
|
||||
|
||||
const target = showInExposed.has(entity.entity_id)
|
||||
? exposedCards
|
||||
: notExposedCards;
|
||||
|
||||
target.push(html`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<state-info
|
||||
.hass=${this.hass}
|
||||
.stateObj=${stateObj}
|
||||
secondary-line
|
||||
@click=${this._showMoreInfo}
|
||||
>
|
||||
${entity.interfaces
|
||||
.filter((ifc) => !IGNORE_INTERFACES.includes(ifc))
|
||||
.map((ifc) =>
|
||||
ifc.replace("Alexa.", "").replace("Controller", "")
|
||||
)
|
||||
.join(", ")}
|
||||
</state-info>
|
||||
<paper-toggle-button
|
||||
.entityId=${entity.entity_id}
|
||||
.disabled=${!emptyFilter}
|
||||
.checked=${isExposed}
|
||||
@checked-changed=${this._exposeChanged}
|
||||
>
|
||||
Expose to Alexa
|
||||
</paper-toggle-button>
|
||||
</div>
|
||||
</ha-card>
|
||||
`);
|
||||
});
|
||||
|
||||
if (trackExposed) {
|
||||
this._isInitialExposed = showInExposed;
|
||||
}
|
||||
|
||||
return html`
|
||||
<hass-subpage header="Alexa">
|
||||
<span slot="toolbar-icon">
|
||||
${selected}${
|
||||
!this.narrow
|
||||
? html`
|
||||
selected
|
||||
`
|
||||
: ""
|
||||
}
|
||||
</span>
|
||||
${
|
||||
emptyFilter
|
||||
? html`
|
||||
<paper-icon-button
|
||||
slot="toolbar-icon"
|
||||
icon="hass:tune"
|
||||
@click=${this._openDomainToggler}
|
||||
></paper-icon-button>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
!emptyFilter
|
||||
? html`
|
||||
<div class="banner">
|
||||
Editing which entities are exposed via this UI is disabled
|
||||
because you have configured entity filters in
|
||||
configuration.yaml.
|
||||
</div>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
exposedCards.length > 0
|
||||
? html`
|
||||
<h1>Exposed entities</h1>
|
||||
<div class="content">${exposedCards}</div>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
notExposedCards.length > 0
|
||||
? html`
|
||||
<h1>Not Exposed entities</h1>
|
||||
<div class="content">${notExposedCards}</div>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
</div>
|
||||
</hass-subpage>
|
||||
`;
|
||||
}
|
||||
|
||||
protected firstUpdated(changedProps) {
|
||||
super.firstUpdated(changedProps);
|
||||
this._fetchData();
|
||||
}
|
||||
|
||||
protected updated(changedProps) {
|
||||
super.updated(changedProps);
|
||||
if (changedProps.has("cloudStatus")) {
|
||||
this._entityConfigs = this.cloudStatus.prefs.alexa_entity_configs;
|
||||
}
|
||||
}
|
||||
|
||||
private async _fetchData() {
|
||||
const entities = await fetchCloudAlexaEntities(this.hass);
|
||||
entities.sort((a, b) => {
|
||||
const stateA = this.hass.states[a.entity_id];
|
||||
const stateB = this.hass.states[b.entity_id];
|
||||
return compare(
|
||||
stateA ? computeStateName(stateA) : a.entity_id,
|
||||
stateB ? computeStateName(stateB) : b.entity_id
|
||||
);
|
||||
});
|
||||
this._entities = entities;
|
||||
}
|
||||
|
||||
private _showMoreInfo(ev) {
|
||||
const entityId = ev.currentTarget.stateObj.entity_id;
|
||||
fireEvent(this, "hass-more-info", { entityId });
|
||||
}
|
||||
|
||||
private async _exposeChanged(ev: PolymerChangedEvent<boolean>) {
|
||||
const entityId = (ev.currentTarget as any).entityId;
|
||||
const newExposed = ev.detail.value;
|
||||
await this._updateExposed(entityId, newExposed);
|
||||
}
|
||||
|
||||
private async _updateExposed(entityId: string, newExposed: boolean) {
|
||||
const curExposed = configIsExposed(this._entityConfigs[entityId] || {});
|
||||
if (newExposed === curExposed) {
|
||||
return;
|
||||
}
|
||||
await this._updateConfig(entityId, {
|
||||
should_expose: newExposed,
|
||||
});
|
||||
this._ensureEntitySync();
|
||||
}
|
||||
|
||||
private async _updateConfig(entityId: string, values: AlexaEntityConfig) {
|
||||
const updatedConfig = await updateCloudAlexaEntityConfig(
|
||||
this.hass,
|
||||
entityId,
|
||||
values
|
||||
);
|
||||
this._entityConfigs = {
|
||||
...this._entityConfigs,
|
||||
[entityId]: updatedConfig,
|
||||
};
|
||||
this._ensureStatusReload();
|
||||
}
|
||||
|
||||
private _openDomainToggler() {
|
||||
showDomainTogglerDialog(this, {
|
||||
domains: this._entities!.map((entity) =>
|
||||
computeDomain(entity.entity_id)
|
||||
).filter((value, idx, self) => self.indexOf(value) === idx),
|
||||
toggleDomain: (domain, turnOn) => {
|
||||
this._entities!.forEach((entity) => {
|
||||
if (computeDomain(entity.entity_id) === domain) {
|
||||
this._updateExposed(entity.entity_id, turnOn);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
private _ensureStatusReload() {
|
||||
if (this._popstateReloadStatusAttached) {
|
||||
return;
|
||||
}
|
||||
this._popstateReloadStatusAttached = true;
|
||||
// Cache parent because by the time popstate happens,
|
||||
// this element is detached
|
||||
const parent = this.parentElement!;
|
||||
window.addEventListener(
|
||||
"popstate",
|
||||
() => fireEvent(parent, "ha-refresh-cloud-status"),
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
|
||||
private _ensureEntitySync() {
|
||||
if (this._popstateSyncAttached) {
|
||||
return;
|
||||
}
|
||||
this._popstateSyncAttached = true;
|
||||
// Cache parent because by the time popstate happens,
|
||||
// this element is detached
|
||||
// const parent = this.parentElement!;
|
||||
window.addEventListener(
|
||||
"popstate",
|
||||
() => {
|
||||
// We don't have anything yet.
|
||||
// showToast(parent, { message: "Synchronizing changes to Google." });
|
||||
// cloudSyncGoogleAssistant(this.hass);
|
||||
},
|
||||
{ once: true }
|
||||
);
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
.banner {
|
||||
color: var(--primary-text-color);
|
||||
background-color: var(
|
||||
--ha-card-background,
|
||||
var(--paper-card-background-color, white)
|
||||
);
|
||||
padding: 16px 8px;
|
||||
text-align: center;
|
||||
}
|
||||
h1 {
|
||||
color: var(--primary-text-color);
|
||||
font-size: 24px;
|
||||
letter-spacing: -0.012em;
|
||||
margin-bottom: 0;
|
||||
padding: 0 8px;
|
||||
}
|
||||
.content {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 4px;
|
||||
--paper-toggle-button-label-spacing: 16px;
|
||||
}
|
||||
paper-toggle-button {
|
||||
clear: both;
|
||||
}
|
||||
ha-card {
|
||||
margin: 4px;
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
}
|
||||
.card-content {
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
state-info {
|
||||
cursor: pointer;
|
||||
}
|
||||
paper-toggle-button {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
@media all and (max-width: 450px) {
|
||||
ha-card {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"cloud-alexa": CloudAlexa;
|
||||
}
|
||||
}
|
@ -1,115 +0,0 @@
|
||||
import {
|
||||
html,
|
||||
LitElement,
|
||||
PropertyDeclarations,
|
||||
PropertyValues,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { repeat } from "lit-html/directives/repeat";
|
||||
import "@polymer/paper-tooltip/paper-tooltip";
|
||||
import { HassEntityBase } from "home-assistant-js-websocket";
|
||||
import "../../../components/entity/ha-state-icon";
|
||||
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import computeStateName from "../../../common/entity/compute_state_name";
|
||||
import {
|
||||
FilterFunc,
|
||||
generateFilter,
|
||||
EntityFilter,
|
||||
} from "../../../common/entity/entity_filter";
|
||||
|
||||
export class CloudExposedEntities extends LitElement {
|
||||
public hass?: HomeAssistant;
|
||||
public filter?: EntityFilter;
|
||||
public supportedDomains?: string[];
|
||||
private _filterFunc?: FilterFunc;
|
||||
|
||||
static get properties(): PropertyDeclarations {
|
||||
return {
|
||||
hass: {},
|
||||
filter: {},
|
||||
supportedDomains: {},
|
||||
_filterFunc: {},
|
||||
};
|
||||
}
|
||||
|
||||
protected render(): TemplateResult | void {
|
||||
if (!this._filterFunc) {
|
||||
return html``;
|
||||
}
|
||||
|
||||
const states: Array<[string, HassEntityBase]> = [];
|
||||
|
||||
Object.keys(this.hass!.states).forEach((entityId) => {
|
||||
if (this._filterFunc!(entityId)) {
|
||||
const stateObj = this.hass!.states[entityId];
|
||||
states.push([computeStateName(stateObj), stateObj]);
|
||||
}
|
||||
});
|
||||
states.sort();
|
||||
|
||||
return html`
|
||||
${this.renderStyle()}
|
||||
${repeat(
|
||||
states!,
|
||||
(stateInfo) => stateInfo[1].entity_id,
|
||||
(stateInfo) => html`
|
||||
<span>
|
||||
<ha-state-icon
|
||||
.stateObj="${stateInfo[1]}"
|
||||
@click="${this._handleMoreInfo}"
|
||||
></ha-state-icon>
|
||||
<paper-tooltip position="bottom">${stateInfo[0]}</paper-tooltip>
|
||||
</span>
|
||||
`
|
||||
)}
|
||||
`;
|
||||
}
|
||||
|
||||
protected updated(changedProperties: PropertyValues) {
|
||||
super.updated(changedProperties);
|
||||
if (
|
||||
changedProperties.has("filter") &&
|
||||
changedProperties.get("filter") !== this.filter
|
||||
) {
|
||||
const filter = this.filter!;
|
||||
const filterFunc = generateFilter(
|
||||
filter.include_domains,
|
||||
filter.include_entities,
|
||||
filter.exclude_domains,
|
||||
filter.exclude_entities
|
||||
);
|
||||
const domains = new Set(this.supportedDomains);
|
||||
this._filterFunc = (entityId: string) => {
|
||||
const domain = entityId.split(".")[0];
|
||||
return domains.has(domain) && filterFunc(entityId);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private _handleMoreInfo(ev: MouseEvent) {
|
||||
fireEvent(this, "hass-more-info", {
|
||||
entityId: (ev.currentTarget as any).stateObj.entity_id,
|
||||
});
|
||||
}
|
||||
|
||||
private renderStyle(): TemplateResult {
|
||||
return html`
|
||||
<style>
|
||||
ha-state-icon {
|
||||
color: var(--primary-text-color);
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"cloud-exposed-entities": CloudExposedEntities;
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("cloud-exposed-entities", CloudExposedEntities);
|
@ -8,15 +8,15 @@ import {
|
||||
} from "lit-element";
|
||||
|
||||
import "@material/mwc-button";
|
||||
import "../../../components/dialog/ha-paper-dialog";
|
||||
import "../../../../components/dialog/ha-paper-dialog";
|
||||
// This is not a duplicate import, one is for types, one is for element.
|
||||
// tslint:disable-next-line
|
||||
import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog";
|
||||
import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog";
|
||||
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import { haStyle } from "../../../../resources/styles";
|
||||
import { CloudCertificateParams as CloudCertificateDialogParams } from "./show-dialog-cloud-certificate";
|
||||
import format_date_time from "../../../common/datetime/format_date_time";
|
||||
import format_date_time from "../../../../common/datetime/format_date_time";
|
||||
|
||||
@customElement("dialog-cloud-certificate")
|
||||
class DialogCloudCertificate extends LitElement {
|
@ -1,5 +1,5 @@
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { CertificateInformation } from "../../../data/cloud";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { CertificateInformation } from "../../../../data/cloud";
|
||||
|
||||
export interface CloudCertificateParams {
|
||||
certificateInfo: CertificateInformation;
|
@ -9,20 +9,20 @@ import {
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
|
||||
import "../../../components/dialog/ha-paper-dialog";
|
||||
import "../../../../components/dialog/ha-paper-dialog";
|
||||
// This is not a duplicate import, one is for types, one is for element.
|
||||
// tslint:disable-next-line
|
||||
import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog";
|
||||
import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog";
|
||||
// tslint:disable-next-line
|
||||
import { PaperInputElement } from "@polymer/paper-input/paper-input";
|
||||
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { WebhookDialogParams } from "./show-cloud-webhook-manage-dialog";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import { haStyle } from "../../../../resources/styles";
|
||||
import { WebhookDialogParams } from "./show-dialog-manage-cloudhook";
|
||||
|
||||
const inputLabel = "Public URL – Click to copy to clipboard";
|
||||
|
||||
export class CloudWebhookManageDialog extends LitElement {
|
||||
export class DialogManageCloudhook extends LitElement {
|
||||
protected hass?: HomeAssistant;
|
||||
private _params?: WebhookDialogParams;
|
||||
|
||||
@ -75,9 +75,9 @@ export class CloudWebhookManageDialog extends LitElement {
|
||||
</div>
|
||||
|
||||
<div class="paper-dialog-buttons">
|
||||
<a href="${docsUrl}" target="_blank"
|
||||
><mwc-button>VIEW DOCUMENTATION</mwc-button></a
|
||||
>
|
||||
<a href="${docsUrl}" target="_blank">
|
||||
<mwc-button>VIEW DOCUMENTATION</mwc-button>
|
||||
</a>
|
||||
<mwc-button @click="${this._closeDialog}">CLOSE</mwc-button>
|
||||
</div>
|
||||
</ha-paper-dialog>
|
||||
@ -136,6 +136,9 @@ export class CloudWebhookManageDialog extends LitElement {
|
||||
button.link {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
.paper-dialog-buttons a {
|
||||
text-decoration: none;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
@ -143,8 +146,8 @@ export class CloudWebhookManageDialog extends LitElement {
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"cloud-webhook-manage-dialog": CloudWebhookManageDialog;
|
||||
"dialog-manage-cloudhook": DialogManageCloudhook;
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("cloud-webhook-manage-dialog", CloudWebhookManageDialog);
|
||||
customElements.define("dialog-manage-cloudhook", DialogManageCloudhook);
|
@ -1,6 +1,6 @@
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { Webhook } from "../../../data/webhook";
|
||||
import { CloudWebhook } from "../../../data/cloud";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { Webhook } from "../../../../data/webhook";
|
||||
import { CloudWebhook } from "../../../../data/cloud";
|
||||
|
||||
export interface WebhookDialogParams {
|
||||
webhook: Webhook;
|
||||
@ -13,9 +13,9 @@ export const showManageCloudhookDialog = (
|
||||
webhookDialogParams: WebhookDialogParams
|
||||
): void => {
|
||||
fireEvent(element, "show-dialog", {
|
||||
dialogTag: "cloud-webhook-manage-dialog",
|
||||
dialogTag: "dialog-manage-cloudhook",
|
||||
dialogImport: () =>
|
||||
import(/* webpackChunkName: "cloud-webhook-manage-dialog" */ "./cloud-webhook-manage-dialog"),
|
||||
import(/* webpackChunkName: "cloud-webhook-manage-dialog" */ "./dialog-manage-cloudhook"),
|
||||
dialogParams: webhookDialogParams,
|
||||
});
|
||||
};
|
@ -2,16 +2,16 @@ import "@polymer/paper-input/paper-input";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/buttons/ha-progress-button";
|
||||
import "../../../layouts/hass-subpage";
|
||||
import "../../../resources/ha-style";
|
||||
import { EventsMixin } from "../../../mixins/events-mixin";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/buttons/ha-progress-button";
|
||||
import "../../../../layouts/hass-subpage";
|
||||
import "../../../../resources/ha-style";
|
||||
import { EventsMixin } from "../../../../mixins/events-mixin";
|
||||
|
||||
/*
|
||||
* @appliesMixin EventsMixin
|
||||
*/
|
||||
class HaConfigCloudForgotPassword extends EventsMixin(PolymerElement) {
|
||||
class CloudForgotPassword extends EventsMixin(PolymerElement) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="iron-flex ha-style">
|
||||
@ -141,7 +141,4 @@ class HaConfigCloudForgotPassword extends EventsMixin(PolymerElement) {
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define(
|
||||
"ha-config-cloud-forgot-password",
|
||||
HaConfigCloudForgotPassword
|
||||
);
|
||||
customElements.define("cloud-forgot-password", CloudForgotPassword);
|
@ -9,33 +9,35 @@ import {
|
||||
} from "lit-element";
|
||||
import "@polymer/paper-toggle-button";
|
||||
import "@polymer/paper-icon-button";
|
||||
import "../../../layouts/hass-subpage";
|
||||
import "../../../layouts/hass-loading-screen";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/entity/state-info";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import "../../../../layouts/hass-subpage";
|
||||
import "../../../../layouts/hass-loading-screen";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/entity/state-info";
|
||||
import { HomeAssistant } from "../../../../types";
|
||||
import {
|
||||
GoogleEntity,
|
||||
fetchCloudGoogleEntities,
|
||||
CloudStatusLoggedIn,
|
||||
CloudPreferences,
|
||||
updateCloudGoogleEntityConfig,
|
||||
cloudSyncGoogleAssistant,
|
||||
GoogleEntityConfig,
|
||||
} from "../../../data/cloud";
|
||||
} from "../../../../data/cloud";
|
||||
import memoizeOne from "memoize-one";
|
||||
import {
|
||||
generateFilter,
|
||||
isEmptyFilter,
|
||||
EntityFilter,
|
||||
} from "../../../common/entity/entity_filter";
|
||||
import { compare } from "../../../common/string/compare";
|
||||
import computeStateName from "../../../common/entity/compute_state_name";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { showToast } from "../../../util/toast";
|
||||
import { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import { showDomainTogglerDialog } from "../../../dialogs/domain-toggler/show-dialog-domain-toggler";
|
||||
import computeDomain from "../../../common/entity/compute_domain";
|
||||
} from "../../../../common/entity/entity_filter";
|
||||
import { compare } from "../../../../common/string/compare";
|
||||
import computeStateName from "../../../../common/entity/compute_state_name";
|
||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||
import { showToast } from "../../../../util/toast";
|
||||
import { PolymerChangedEvent } from "../../../../polymer-types";
|
||||
import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler";
|
||||
import computeDomain from "../../../../common/entity/compute_domain";
|
||||
import {
|
||||
GoogleEntity,
|
||||
fetchCloudGoogleEntities,
|
||||
} from "../../../../data/google_assistant";
|
||||
|
||||
const DEFAULT_CONFIG_EXPOSE = true;
|
||||
|
||||
@ -44,7 +46,7 @@ const configIsExposed = (config: GoogleEntityConfig) =>
|
||||
? DEFAULT_CONFIG_EXPOSE
|
||||
: config.should_expose;
|
||||
|
||||
@customElement("ha-config-cloud-google-assistant")
|
||||
@customElement("cloud-google-assistant")
|
||||
class CloudGoogleAssistant extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
@property() public cloudStatus!: CloudStatusLoggedIn;
|
||||
@ -54,6 +56,7 @@ class CloudGoogleAssistant extends LitElement {
|
||||
private _entityConfigs: CloudPreferences["google_entity_configs"] = {};
|
||||
private _popstateSyncAttached = false;
|
||||
private _popstateReloadStatusAttached = false;
|
||||
private _isInitialExposed?: Set<string>;
|
||||
|
||||
private _getEntityFilterFunc = memoizeOne((filter: EntityFilter) =>
|
||||
generateFilter(
|
||||
@ -74,8 +77,21 @@ class CloudGoogleAssistant extends LitElement {
|
||||
const filterFunc = this._getEntityFilterFunc(
|
||||
this.cloudStatus.google_entities
|
||||
);
|
||||
|
||||
// We will only generate `isInitialExposed` during first render.
|
||||
// On each subsequent render we will use the same set so that cards
|
||||
// will not jump around when we change the exposed setting.
|
||||
const showInExposed = this._isInitialExposed || new Set();
|
||||
const trackExposed = this._isInitialExposed === undefined;
|
||||
|
||||
let selected = 0;
|
||||
const cards = this._entities.map((entity) => {
|
||||
|
||||
// On first render we decide which cards show in which category.
|
||||
// That way cards won't jump around when changing values.
|
||||
const exposedCards: TemplateResult[] = [];
|
||||
const notExposedCards: TemplateResult[] = [];
|
||||
|
||||
this._entities.forEach((entity) => {
|
||||
const stateObj = this.hass.states[entity.entity_id];
|
||||
const config = this._entityConfigs[entity.entity_id] || {};
|
||||
const isExposed = emptyFilter
|
||||
@ -83,9 +99,17 @@ class CloudGoogleAssistant extends LitElement {
|
||||
: filterFunc(entity.entity_id);
|
||||
if (isExposed) {
|
||||
selected++;
|
||||
|
||||
if (trackExposed) {
|
||||
showInExposed.add(entity.entity_id);
|
||||
}
|
||||
}
|
||||
|
||||
return html`
|
||||
const target = showInExposed.has(entity.entity_id)
|
||||
? exposedCards
|
||||
: notExposedCards;
|
||||
|
||||
target.push(html`
|
||||
<ha-card>
|
||||
<div class="card-content">
|
||||
<state-info
|
||||
@ -119,34 +143,62 @@ class CloudGoogleAssistant extends LitElement {
|
||||
: ""}
|
||||
</div>
|
||||
</ha-card>
|
||||
`;
|
||||
`);
|
||||
});
|
||||
|
||||
if (trackExposed) {
|
||||
this._isInitialExposed = showInExposed;
|
||||
}
|
||||
|
||||
return html`
|
||||
<hass-subpage header="Google Assistant">
|
||||
<span slot="toolbar-icon">
|
||||
${selected}${!this.narrow
|
||||
? html`
|
||||
selected
|
||||
`
|
||||
: ""}
|
||||
${selected}${
|
||||
!this.narrow
|
||||
? html`
|
||||
selected
|
||||
`
|
||||
: ""
|
||||
}
|
||||
</span>
|
||||
<paper-icon-button
|
||||
slot="toolbar-icon"
|
||||
icon="hass:tune"
|
||||
@click=${this._openDomainToggler}
|
||||
></paper-icon-button>
|
||||
${!emptyFilter
|
||||
? html`
|
||||
<div class="banner">
|
||||
Editing which entities are exposed via this UI is disabled
|
||||
because you have configured entity filters in
|
||||
configuration.yaml.
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
<div class="content">
|
||||
${cards}
|
||||
${
|
||||
emptyFilter
|
||||
? html`
|
||||
<paper-icon-button
|
||||
slot="toolbar-icon"
|
||||
icon="hass:tune"
|
||||
@click=${this._openDomainToggler}
|
||||
></paper-icon-button>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
!emptyFilter
|
||||
? html`
|
||||
<div class="banner">
|
||||
Editing which entities are exposed via this UI is disabled
|
||||
because you have configured entity filters in
|
||||
configuration.yaml.
|
||||
</div>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
exposedCards.length > 0
|
||||
? html`
|
||||
<h1>Exposed entities</h1>
|
||||
<div class="content">${exposedCards}</div>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
notExposedCards.length > 0
|
||||
? html`
|
||||
<h1>Not Exposed entities</h1>
|
||||
<div class="content">${notExposedCards}</div>
|
||||
`
|
||||
: ""
|
||||
}
|
||||
</div>
|
||||
</hass-subpage>
|
||||
`;
|
||||
@ -285,6 +337,13 @@ class CloudGoogleAssistant extends LitElement {
|
||||
padding: 16px 8px;
|
||||
text-align: center;
|
||||
}
|
||||
h1 {
|
||||
color: var(--primary-text-color);
|
||||
font-size: 24px;
|
||||
letter-spacing: -0.012em;
|
||||
margin-bottom: 0;
|
||||
padding: 0 8px;
|
||||
}
|
||||
.content {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@ -305,12 +364,18 @@ class CloudGoogleAssistant extends LitElement {
|
||||
paper-toggle-button {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
@media all and (max-width: 450px) {
|
||||
ha-card {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-config-cloud-google-assistant": CloudGoogleAssistant;
|
||||
"cloud-google-assistant": CloudGoogleAssistant;
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import "./ha-config-cloud-account";
|
||||
import "./ha-config-cloud-login";
|
||||
import "./account/cloud-account";
|
||||
import "./login/cloud-login";
|
||||
import {
|
||||
HassRouterPage,
|
||||
RouterOptions,
|
||||
@ -11,7 +11,7 @@ import { CloudStatus } from "../../../data/cloud";
|
||||
import { PolymerChangedEvent } from "../../../polymer-types";
|
||||
import { PolymerElement } from "@polymer/polymer";
|
||||
|
||||
const LOGGED_IN_URLS = ["account", "google-assistant"];
|
||||
const LOGGED_IN_URLS = ["account", "google-assistant", "alexa"];
|
||||
const NOT_LOGGED_IN_URLS = ["login", "register", "forgot-password"];
|
||||
|
||||
@customElement("ha-config-cloud")
|
||||
@ -41,22 +41,26 @@ class HaConfigCloud extends HassRouterPage {
|
||||
},
|
||||
routes: {
|
||||
login: {
|
||||
tag: "ha-config-cloud-login",
|
||||
tag: "cloud-login",
|
||||
},
|
||||
register: {
|
||||
tag: "ha-config-cloud-register",
|
||||
load: () => import("./ha-config-cloud-register"),
|
||||
tag: "cloud-register",
|
||||
load: () => import("./register/cloud-register"),
|
||||
},
|
||||
"forgot-password": {
|
||||
tag: "ha-config-cloud-forgot-password",
|
||||
load: () => import("./ha-config-cloud-forgot-password"),
|
||||
tag: "cloud-forgot-password",
|
||||
load: () => import("./forgot-password/cloud-forgot-password"),
|
||||
},
|
||||
account: {
|
||||
tag: "ha-config-cloud-account",
|
||||
tag: "cloud-account",
|
||||
},
|
||||
"google-assistant": {
|
||||
tag: "ha-config-cloud-google-assistant",
|
||||
load: () => import("./ha-config-cloud-google-assistant"),
|
||||
tag: "cloud-google-assistant",
|
||||
load: () => import("./google-assistant/cloud-google-assistant"),
|
||||
},
|
||||
alexa: {
|
||||
tag: "cloud-alexa",
|
||||
load: () => import("./alexa/cloud-alexa"),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -7,20 +7,20 @@ import "@polymer/paper-ripple/paper-ripple";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/buttons/ha-progress-button";
|
||||
import "../../../layouts/hass-subpage";
|
||||
import "../../../resources/ha-style";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/buttons/ha-progress-button";
|
||||
import "../../../../layouts/hass-subpage";
|
||||
import "../../../../resources/ha-style";
|
||||
|
||||
import "../ha-config-section";
|
||||
import { EventsMixin } from "../../../mixins/events-mixin";
|
||||
import NavigateMixin from "../../../mixins/navigate-mixin";
|
||||
import "../../../components/ha-icon-next";
|
||||
import "../../ha-config-section";
|
||||
import { EventsMixin } from "../../../../mixins/events-mixin";
|
||||
import NavigateMixin from "../../../../mixins/navigate-mixin";
|
||||
import "../../../../components/ha-icon-next";
|
||||
/*
|
||||
* @appliesMixin NavigateMixin
|
||||
* @appliesMixin EventsMixin
|
||||
*/
|
||||
class HaConfigCloudLogin extends NavigateMixin(EventsMixin(PolymerElement)) {
|
||||
class CloudLogin extends NavigateMixin(EventsMixin(PolymerElement)) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="iron-flex ha-style">
|
||||
@ -292,4 +292,4 @@ class HaConfigCloudLogin extends NavigateMixin(EventsMixin(PolymerElement)) {
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-config-cloud-login", HaConfigCloudLogin);
|
||||
customElements.define("cloud-login", CloudLogin);
|
@ -2,17 +2,17 @@ import "@polymer/paper-input/paper-input";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/buttons/ha-progress-button";
|
||||
import "../../../layouts/hass-subpage";
|
||||
import "../../../resources/ha-style";
|
||||
import "../ha-config-section";
|
||||
import { EventsMixin } from "../../../mixins/events-mixin";
|
||||
import "../../../../components/ha-card";
|
||||
import "../../../../components/buttons/ha-progress-button";
|
||||
import "../../../../layouts/hass-subpage";
|
||||
import "../../../../resources/ha-style";
|
||||
import "../../ha-config-section";
|
||||
import { EventsMixin } from "../../../../mixins/events-mixin";
|
||||
|
||||
/*
|
||||
* @appliesMixin EventsMixin
|
||||
*/
|
||||
class HaConfigCloudRegister extends EventsMixin(PolymerElement) {
|
||||
class CloudRegister extends EventsMixin(PolymerElement) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="iron-flex ha-style">
|
||||
@ -217,4 +217,4 @@ class HaConfigCloudRegister extends EventsMixin(PolymerElement) {
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-config-cloud-register", HaConfigCloudRegister);
|
||||
customElements.define("cloud-register", CloudRegister);
|
@ -125,7 +125,7 @@ class HaConfigEntryPage extends NavigateMixin(
|
||||
.filter((device) => device.config_entries.includes(configEntry.entry_id))
|
||||
.sort(
|
||||
(dev1, dev2) =>
|
||||
!!dev1.hub_device_id - !!dev2.hub_device_id ||
|
||||
!!dev1.via_device_id - !!dev2.via_device_id ||
|
||||
compare(dev1.name, dev2.name)
|
||||
);
|
||||
}
|
||||
|
@ -106,11 +106,11 @@ class HaDeviceCard extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<template is="dom-if" if="[[device.hub_device_id]]">
|
||||
<template is="dom-if" if="[[device.via_device_id]]">
|
||||
<div class="extra-info">
|
||||
[[localize('ui.panel.config.integrations.config_entry.hub')]]
|
||||
[[localize('ui.panel.config.integrations.config_entry.via')]]
|
||||
<span class="hub"
|
||||
>[[_computeDeviceName(devices, device.hub_device_id)]]</span
|
||||
>[[_computeDeviceName(devices, device.via_device_id)]]</span
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
@ -201,7 +201,7 @@ class HaDeviceCard extends EventsMixin(LocalizeMixin(PolymerElement)) {
|
||||
|
||||
_computeChildDevices(device, devices) {
|
||||
return devices
|
||||
.filter((dev) => dev.hub_device_id === device.id)
|
||||
.filter((dev) => dev.via_device_id === device.id)
|
||||
.sort((dev1, dev2) => compare(dev1.name, dev2.name));
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@ const addEntities = (entities: Set<string>, obj) => {
|
||||
};
|
||||
|
||||
const computeUsedEntities = (config) => {
|
||||
const entities = new Set();
|
||||
const entities = new Set<string>();
|
||||
config.views.forEach((view) => addEntities(entities, view));
|
||||
return entities;
|
||||
};
|
||||
|
@ -25,6 +25,10 @@ export class HuiNotificationItemTemplate extends LitElement {
|
||||
return css`
|
||||
.contents {
|
||||
padding: 16px;
|
||||
-ms-user-select: text;
|
||||
-webkit-user-select: text;
|
||||
-moz-user-select: text;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
ha-card .header {
|
||||
|
@ -5,6 +5,7 @@ import {
|
||||
LovelaceConfig,
|
||||
saveConfig,
|
||||
subscribeLovelaceUpdates,
|
||||
WindowWithLovelaceProm,
|
||||
} from "../../data/lovelace";
|
||||
import "../../layouts/hass-loading-screen";
|
||||
import "../../layouts/hass-error-screen";
|
||||
@ -200,9 +201,19 @@ class LovelacePanel extends LitElement {
|
||||
private async _fetchConfig(forceDiskRefresh) {
|
||||
let conf: LovelaceConfig;
|
||||
let confMode: Lovelace["mode"] = this.panel!.config.mode;
|
||||
let confProm: Promise<LovelaceConfig>;
|
||||
const llWindow = window as WindowWithLovelaceProm;
|
||||
|
||||
// On first load, we speed up loading page by having LL promise ready
|
||||
if (llWindow.llConfProm) {
|
||||
confProm = llWindow.llConfProm;
|
||||
llWindow.llConfProm = undefined;
|
||||
} else {
|
||||
confProm = fetchConfig(this.hass!.connection, forceDiskRefresh);
|
||||
}
|
||||
|
||||
try {
|
||||
conf = await fetchConfig(this.hass!, forceDiskRefresh);
|
||||
conf = await confProm;
|
||||
} catch (err) {
|
||||
if (err.code !== "config_not_found") {
|
||||
// tslint:disable-next-line
|
||||
|
@ -57,8 +57,6 @@ import { computeRTLDirection } from "../../common/util/compute_rtl";
|
||||
const CSS_CACHE = {};
|
||||
const JS_CACHE = {};
|
||||
|
||||
let loadedUnusedEntities = false;
|
||||
|
||||
class HUIRoot extends LitElement {
|
||||
@property() public hass?: HomeAssistant;
|
||||
@property() public lovelace?: Lovelace;
|
||||
@ -441,7 +439,8 @@ class HUIRoot extends LitElement {
|
||||
if (force && newSelectView === undefined) {
|
||||
newSelectView = this._curView;
|
||||
}
|
||||
this._selectView(newSelectView, force);
|
||||
// Will allow for ripples to start rendering
|
||||
afterNextRender(() => this._selectView(newSelectView, force));
|
||||
}
|
||||
}
|
||||
|
||||
@ -565,10 +564,7 @@ class HUIRoot extends LitElement {
|
||||
scrollToTarget(this, this._layout.header.scrollTarget);
|
||||
}
|
||||
|
||||
private async _selectView(
|
||||
viewIndex: HUIRoot["_curView"],
|
||||
force: boolean
|
||||
): Promise<void> {
|
||||
private _selectView(viewIndex: HUIRoot["_curView"], force: boolean): void {
|
||||
if (!force && this._curView === viewIndex) {
|
||||
return;
|
||||
}
|
||||
@ -589,15 +585,16 @@ class HUIRoot extends LitElement {
|
||||
}
|
||||
|
||||
if (viewIndex === "hass-unused-entities") {
|
||||
if (!loadedUnusedEntities) {
|
||||
loadedUnusedEntities = true;
|
||||
await import(/* webpackChunkName: "hui-unused-entities" */ "./hui-unused-entities");
|
||||
}
|
||||
const unusedEntities = document.createElement("hui-unused-entities");
|
||||
unusedEntities.setConfig(this.config);
|
||||
unusedEntities.hass = this.hass!;
|
||||
// Wait for promise to resolve so that the element has been upgraded.
|
||||
import(/* webpackChunkName: "hui-unused-entities" */ "./hui-unused-entities").then(
|
||||
() => {
|
||||
unusedEntities.setConfig(this.config);
|
||||
unusedEntities.hass = this.hass!;
|
||||
}
|
||||
);
|
||||
root.style.background = this.config.background || "";
|
||||
root.appendChild(unusedEntities);
|
||||
root.append(unusedEntities);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -612,8 +609,6 @@ class HUIRoot extends LitElement {
|
||||
if (!force && this._viewCache![viewIndex]) {
|
||||
view = this._viewCache![viewIndex];
|
||||
} else {
|
||||
await new Promise((resolve) => afterNextRender(resolve));
|
||||
|
||||
if (viewConfig.panel && viewConfig.cards && viewConfig.cards.length > 0) {
|
||||
view = createCardElement(viewConfig.cards[0]);
|
||||
view.isPanel = true;
|
||||
@ -629,7 +624,7 @@ class HUIRoot extends LitElement {
|
||||
view.hass = this.hass;
|
||||
root.style.background =
|
||||
viewConfig.background || this.config.background || "";
|
||||
root.appendChild(view);
|
||||
root.append(view);
|
||||
}
|
||||
|
||||
private _loadResources(resources) {
|
||||
|
@ -598,7 +598,7 @@
|
||||
"delete_confirm": "Is u seker u wil hierdie integrasie skrap?",
|
||||
"restart_confirm": "Herbegin Home Assistant om hierdie integrasie te voltooi",
|
||||
"manuf": "deur {manufacturer}",
|
||||
"hub": "Gekonnekteer via",
|
||||
"via": "Gekonnekteer via",
|
||||
"firmware": "Fermware: {version}",
|
||||
"device_unavailable": "toestel nie beskikbaar nie",
|
||||
"entity_unavailable": "entiteit nie beskikbaar nie",
|
||||
|
@ -562,7 +562,7 @@
|
||||
"delete_confirm": "هل تريد حقا حذف هذا التكامل؟",
|
||||
"restart_confirm": "اعادة تشغيل هوم اسيستينت لإنهاء حذف هذه التكامل",
|
||||
"manuf": "بواسطة {manufacturer}",
|
||||
"hub": "متصل من خلال",
|
||||
"via": "متصل من خلال",
|
||||
"firmware": "نظام التشغيل {version}",
|
||||
"device_unavailable": "الجهاز غير متوفر",
|
||||
"entity_unavailable": "العنصر غير متوفر",
|
||||
|
@ -595,7 +595,7 @@
|
||||
"delete_confirm": "Сигурни ли сте, че искате да изтриете интеграцията?",
|
||||
"restart_confirm": "Рестартирайте Home Assistant за да завършите премахването на интеграцията",
|
||||
"manuf": "от {manufacturer}",
|
||||
"hub": "Свързан чрез",
|
||||
"via": "Свързан чрез",
|
||||
"firmware": "Фърмуер: {version}",
|
||||
"device_unavailable": "недостъпно устройство",
|
||||
"entity_unavailable": "недостъпен",
|
||||
|
@ -387,7 +387,7 @@
|
||||
"description": "Crea i edita automatismes",
|
||||
"picker": {
|
||||
"header": "Editor d'automatismes",
|
||||
"introduction": "L'editor d'automatismes permet crear i editar automatismes. Llegeix [les instruccions](https:\/\/home-assistant.io\/docs\/automation\/editor\/) per assegurar-te que has configurat el Home Assistant correctament.",
|
||||
"introduction": "L'editor d'automatismes permet crear i editar automatismes. Vés a l'enllaç de sota per llegir les instruccions i assegurar-te que has configurat el Home Assistant correctament.",
|
||||
"pick_automation": "Selecciona l'automatisme a editar",
|
||||
"no_automations": "No s'ha pogut trobar cap automatisme editable",
|
||||
"add_automation": "Afegir automatisme",
|
||||
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Estas segur que vols eliminar aquesta integració?",
|
||||
"restart_confirm": "Reinicia el Home Assistant per acabar d'eliminar aquesta integració",
|
||||
"manuf": "de {manufacturer}",
|
||||
"hub": "Connectat a través de",
|
||||
"via": "Connectat a través de",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "dispositiu no disponible",
|
||||
"entity_unavailable": "entitat no disponible",
|
||||
@ -966,7 +966,7 @@
|
||||
"entity_non_numeric": "Entitat no numèrica: {entity}"
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "S'ha actualitzat la configuració de Lovelace, vols refrescar-ho?",
|
||||
"message": "S'ha actualitzat la configuració de Lovelace, vols actualitzar la pàgina?",
|
||||
"refresh": "Actualitza"
|
||||
},
|
||||
"reload_lovelace": "Recarrega Lovelace"
|
||||
|
@ -598,7 +598,7 @@
|
||||
"delete_confirm": "Opravdu chcete odstranit tuto integraci?",
|
||||
"restart_confirm": "Restartujte Home Assistant pro odstranění této integrace",
|
||||
"manuf": "od {manufacturer}",
|
||||
"hub": "Připojeno přes",
|
||||
"via": "Připojeno přes",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "zařízení není k dispozici",
|
||||
"entity_unavailable": "entita není k dispozici",
|
||||
|
@ -343,6 +343,21 @@
|
||||
"introduction": "Rheoli gweinydd eich Home Assistant ... o Home Assistant",
|
||||
"restart": "Ailgychwyn",
|
||||
"stop": "Stopio"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Golygydd wedi'i analluogi oherwydd bod ffurfwedd wedi'i storio mewn 'configuration.yaml'.",
|
||||
"location_name": "Enw eich gosodiad Home Assistant",
|
||||
"latitude": "Lledred",
|
||||
"longitude": "Hydred",
|
||||
"elevation": "Uchder",
|
||||
"elevation_meters": "metrau",
|
||||
"time_zone": "Parth Amser",
|
||||
"unit_system": "System Uned",
|
||||
"unit_system_imperial": "Imperial",
|
||||
"unit_system_metric": "Metrig",
|
||||
"imperial_example": "Fahrenheit, pwys",
|
||||
"metric_example": "Celsius, cilogramau",
|
||||
"save_button": "Arbed"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -532,7 +547,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "Dysgu mwy am gamau gweithredu"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Dim ond awtomiadau yn 'automations. yaml' y gellir golygu.",
|
||||
"load_error_unknown": "Gwall wrth lwytho awtomeiddad ( {err_no} )."
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -545,11 +562,17 @@
|
||||
},
|
||||
"integrations": {
|
||||
"config_entry": {
|
||||
"hub": "Cysylltiad drwy",
|
||||
"via": "Cysylltiad drwy",
|
||||
"firmware": "Cadarnwedd: {version}",
|
||||
"device_unavailable": "Dyfais ddim ar gael",
|
||||
"entity_unavailable": "endid ar gael",
|
||||
"no_area": "Dim Ardal"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
"description": "Mae'r cam angen ichi ymweld â wefan allanol i'w lenwi.",
|
||||
"open_site": "Gwefan agored"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@ -697,7 +720,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Endid ddim ar gael: {entity}",
|
||||
"entity_non_numeric": "Endid di-rhifol: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "Diweddarwyd ffurfwedd Lovelace, hoffech adnewyddu?",
|
||||
"refresh": "Adnewyddu"
|
||||
},
|
||||
"reload_lovelace": "Ail-lwytho Lovelace"
|
||||
},
|
||||
"page-authorize": {
|
||||
"form": {
|
||||
@ -736,12 +764,26 @@
|
||||
"error": {
|
||||
"password_not_match": "Cyfrineiriau ddim yn cyfateb"
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"intro": "Cynrychiolir dyfeisiau a gwasanaethau yn Home Assistant fel integreiddiadau. Gallwch eu gosod nawr, neu'n ddiweddarach o'r sgrin ffurfweddu.",
|
||||
"more_integrations": "Mwy",
|
||||
"finish": "Gorffen"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Helo {name}, croeso i Home Assistant. Sut hoffech enwi eich tŷ?",
|
||||
"intro_location": "Hoffem wybod ble rydych chi'n byw. Bydd y wybodaeth yn helpu i arddangos gwybodaeth a sefydlu awtomeiddiadau haul. Tydi'r data byth yn cael ei rannu thu allan i'ch rhwydwaith.",
|
||||
"intro_location_detect": "Gallwn eich helpu i lenwi'r wybodaeth hon drwy wneud cais un-tro i wasanaeth allanol.",
|
||||
"location_name_default": "Hafan",
|
||||
"button_detect": "Canfod",
|
||||
"finish": "Nesaf"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"log_out": "Allgofnodi",
|
||||
"developer_tools": "Offer datblygwr"
|
||||
"developer_tools": "Offer datblygwr",
|
||||
"external_app_configuration": "Ffurfweddu App"
|
||||
},
|
||||
"common": {
|
||||
"loading": "Llwytho",
|
||||
|
@ -611,7 +611,7 @@
|
||||
"delete_confirm": "Er du sikker på, at du vil fjerne denne integration?",
|
||||
"restart_confirm": "Genstart Home Assistant for at afslutte fjernelsen af denne integration",
|
||||
"manuf": "af {manufacturer}",
|
||||
"hub": "Forbundet via",
|
||||
"via": "Forbundet via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "enhed utilgængelig",
|
||||
"entity_unavailable": "entitet utilgængelig",
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Möchtest du diese Integration wirklich löschen?",
|
||||
"restart_confirm": "Starte Home Assistant neu, um das Entfernen dieser Integration abzuschließen",
|
||||
"manuf": "von {manufacturer}",
|
||||
"hub": "Verbunden über",
|
||||
"via": "Verbunden über",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "Gerät nicht verfügbar",
|
||||
"entity_unavailable": "Entität nicht verfügbar",
|
||||
|
@ -355,6 +355,21 @@
|
||||
"introduction": "Έλεγχος του διακομιστή Home Assistant... απο τον Home Assistant",
|
||||
"restart": "Επανεκκίνηση",
|
||||
"stop": "Στοπ"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Ο επεξεργαστής απενεργοποιήθηκε επειδή οι ρυθμίσεις παραμέτρων αποθηκεύτηκαν στο αρχείο configuration.yaml.",
|
||||
"location_name": "Όνομα της εγκατάστασης του Home Assistant",
|
||||
"latitude": "Γεωγραφικό πλάτος",
|
||||
"longitude": "Γεωγραφικό μήκος",
|
||||
"elevation": "Ανύψωση",
|
||||
"elevation_meters": "μέτρα",
|
||||
"time_zone": "Ζώνη Ώρας",
|
||||
"unit_system": "Μονάδα Συστήματος",
|
||||
"unit_system_imperial": "Αυτοκρατορικός",
|
||||
"unit_system_metric": "Μετρικό",
|
||||
"imperial_example": "Φαρενάιτ, λίρες",
|
||||
"metric_example": "Κελσίου, κιλά",
|
||||
"save_button": "Αποθήκευση"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -545,7 +560,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "Μάθετε περισσότερα σχετικά με τις ενέργειες"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Μόνο οι αυτοματισμοί στο automation.yaml είναι επεξεργάσιμοι.",
|
||||
"load_error_unknown": "Σφάλμα κατά τη φόρτωση αυτοματισμού ({err_no})."
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -598,7 +615,7 @@
|
||||
"delete_confirm": "Είστε σίγουρος ότι θέλετε να διαγραφεί αυτή η ενοποίηση;",
|
||||
"restart_confirm": "Επανεκκινήστε το Home Assistant για να ολοκληρώσετε την κατάργηση αυτής της ενοποίησης",
|
||||
"manuf": "από {manufacturer}",
|
||||
"hub": "Συνδεδεμένο μέσω",
|
||||
"via": "Συνδεδεμένο μέσω",
|
||||
"firmware": "Υλικολογισμικό: {έκδοση}",
|
||||
"device_unavailable": "συσκευή μη διαθέσιμη",
|
||||
"entity_unavailable": "οντότητα μη διαθέσιμη",
|
||||
@ -866,6 +883,14 @@
|
||||
"intro": "Οι συσκευές και οι υπηρεσίες εκπροσωπούνται στο Home Assistant ως ενσωματώσεις. Μπορείτε να τα ρυθμίσετε τώρα ή αργότερα από την οθόνη διαμόρφωσης.",
|
||||
"more_integrations": "Περισσότερα",
|
||||
"finish": "Τέλος"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Γεια σου {name}, καλώς ήρθες στο Home Assistant. Πώς θα ήθελες να αναφέρεσαι στο σπίτι σου;",
|
||||
"intro_location": "Θα θέλαμε να μάθουμε πού ζείς. Αυτές οι πληροφορίες θα βοηθήσουν στην προβολή πληροφοριών και στη ρύθμιση αυτοματισμών που βασίζονται στον ήλιο. Αυτά τα δεδομένα δεν μοιράζονται ποτέ εκτός του δικτύου σας.",
|
||||
"intro_location_detect": "Μπορούμε να σε βοηθήσουμε να συμπληρώσεις αυτές τις πληροφορίες, κάνοντας μια εφάπαξ αίτηση σε μια εξωτερική υπηρεσία.",
|
||||
"location_name_default": "Σπίτι",
|
||||
"button_detect": "Ανίχνευση",
|
||||
"finish": "Επόμενο"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -939,7 +964,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Η οντότητα δεν είναι διαθέσιμη: {entity}",
|
||||
"entity_non_numeric": "Η οντότητα δεν είναι αριθμητική: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "Οι ρυθμίσεις Lovelace άλλαξαν, θέλεις να ανανεώσεις;",
|
||||
"refresh": "Ανανέωση"
|
||||
},
|
||||
"reload_lovelace": "Επαναφόρτωση Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Are you sure you want to delete this integration?",
|
||||
"restart_confirm": "Restart Home Assistant to finish removing this integration",
|
||||
"manuf": "by {manufacturer}",
|
||||
"hub": "Connected via",
|
||||
"via": "Connected via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "device unavailable",
|
||||
"entity_unavailable": "entity unavailable",
|
||||
|
@ -355,6 +355,21 @@
|
||||
"introduction": "Controle su servidor Home Assistant ... desde Home Assistant.",
|
||||
"restart": "Reiniciar",
|
||||
"stop": "Detener"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Editor desactivado porque config está almacenado en configuration.yaml.",
|
||||
"location_name": "Nombre de la instalación de tu Home Assistant",
|
||||
"latitude": "Latitud",
|
||||
"longitude": "Longitud",
|
||||
"elevation": "Elevación",
|
||||
"elevation_meters": "metros",
|
||||
"time_zone": "Zona horaria",
|
||||
"unit_system": "Sistema de unidades",
|
||||
"unit_system_imperial": "Imperial",
|
||||
"unit_system_metric": "Métrico",
|
||||
"imperial_example": "Fahrenheit, libras",
|
||||
"metric_example": "Centígrados, kilogramos",
|
||||
"save_button": "Guardar"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -545,7 +560,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "Más información sobre las acciones"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Solo las automatizaciones en automations.yaml son editables.",
|
||||
"load_error_unknown": "Error al cargar la automatización ({err_no})."
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -598,11 +615,17 @@
|
||||
"delete_confirm": "¿Estás seguro de que quieres eliminar esta integración?",
|
||||
"restart_confirm": "Reinicie Home Assistant para terminar de eliminar esta integración.",
|
||||
"manuf": "por {manufacturer}",
|
||||
"hub": "Conectado a través de",
|
||||
"via": "Conectado a través de",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "dispositivo no disponible",
|
||||
"entity_unavailable": "entidad no disponible",
|
||||
"no_area": "Ninguna área"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
"description": "Este paso requiere que visites un sitio web externo para ser completado.",
|
||||
"open_site": "Abrir sitio web"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@ -855,6 +878,19 @@
|
||||
"required_fields": "Completar todos los campos requeridos",
|
||||
"password_not_match": "Las contraseñas no coinciden"
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"intro": "Los dispositivos y servicios están representados en Home Assistant como integraciones. Puede configurarlos ahora, o hacerlo más tarde desde la pantalla de configuración.",
|
||||
"more_integrations": "Más",
|
||||
"finish": "Terminar"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Hola {name}, bienvenido a Home Assistant. ¿Cómo te gustaría llamar a tu casa?",
|
||||
"intro_location": "Nos gustaría saber dónde vives. Esta información ayudará a mostrar información y configurar automatizaciones basadas en el sol. Estos datos nunca se comparten fuera de tu red.",
|
||||
"intro_location_detect": "Podemos ayudarte a completar esta información realizando una solicitud única a un servicio externo.",
|
||||
"location_name_default": "En Casa",
|
||||
"button_detect": "Detectar",
|
||||
"finish": "Siguiente"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -870,7 +906,10 @@
|
||||
"go_to_integrations_page": "Ir a la página de integraciones."
|
||||
},
|
||||
"picture-elements": {
|
||||
"hold": "Mantener:",
|
||||
"tap": "Toque:",
|
||||
"navigate_to": "Navegue a {location}",
|
||||
"toggle": "Alternar {name}",
|
||||
"call_service": "Servicio de llamadas {name}",
|
||||
"more_info": "Mostrar más información: {nombre}"
|
||||
}
|
||||
@ -925,7 +964,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Entidad no disponible: {entity}",
|
||||
"entity_non_numeric": "Entidad no es numérica: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "La configuración de Lovelace fue actualizada, ¿te gustaría refrescarla?",
|
||||
"refresh": "Actualizar"
|
||||
},
|
||||
"reload_lovelace": "Recargar Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
|
@ -61,7 +61,7 @@
|
||||
"on": "Detectado"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Despejado",
|
||||
"off": "No detectado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"sound": {
|
||||
@ -81,8 +81,8 @@
|
||||
"on": "Inseguro"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Casa vacía",
|
||||
"on": "Casa"
|
||||
"off": "Fuera de casa",
|
||||
"on": "En casa"
|
||||
},
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
@ -113,7 +113,7 @@
|
||||
"on": "Caliente"
|
||||
},
|
||||
"window": {
|
||||
"off": "Cerrada",
|
||||
"off": "Cerrado",
|
||||
"on": "Abierta"
|
||||
},
|
||||
"lock": {
|
||||
@ -175,7 +175,7 @@
|
||||
"opening": "Abriendo",
|
||||
"closed": "Cerrado",
|
||||
"closing": "Cerrando",
|
||||
"stopped": "Parado",
|
||||
"stopped": "Detenido",
|
||||
"locked": "Bloqueado",
|
||||
"unlocked": "Desbloqueado",
|
||||
"ok": "OK",
|
||||
@ -286,17 +286,17 @@
|
||||
"alarm_control_panel": {
|
||||
"armed": "Armado",
|
||||
"disarmed": "Desarmar",
|
||||
"armed_home": "Armada",
|
||||
"armed_away": "Armada",
|
||||
"armed_night": "Armada",
|
||||
"armed_home": "Armado",
|
||||
"armed_away": "Armado",
|
||||
"armed_night": "Armado",
|
||||
"pending": "Pendiente",
|
||||
"arming": "Armando",
|
||||
"disarming": "Desarmar",
|
||||
"triggered": "Activada",
|
||||
"armed_custom_bypass": "Armada"
|
||||
"armed_custom_bypass": "Armado"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Casa",
|
||||
"home": "En casa",
|
||||
"not_home": "Fuera"
|
||||
},
|
||||
"person": {
|
||||
@ -320,7 +320,7 @@
|
||||
"period": "Periodo"
|
||||
},
|
||||
"mailbox": {
|
||||
"empty": "No tiene ningún mensaje",
|
||||
"empty": "No tienes ningún mensaje",
|
||||
"playback_title": "Reproducción de mensajes",
|
||||
"delete_prompt": "¿Eliminar este mensaje?",
|
||||
"delete_button": "Eliminar"
|
||||
@ -355,6 +355,21 @@
|
||||
"introduction": "Controla tu servidor de Home Assistant ... desde Home Assistant.",
|
||||
"restart": "Reiniciar",
|
||||
"stop": "Detener"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Editor deshabilitado debido a la configuración almacenada en configuration.yaml.",
|
||||
"location_name": "Nombre de tu instalación de Home Assistant",
|
||||
"latitude": "Latitud",
|
||||
"longitude": "Longitud",
|
||||
"elevation": "Elevación",
|
||||
"elevation_meters": "metros",
|
||||
"time_zone": "Zona horaria",
|
||||
"unit_system": "Sistema de unidades",
|
||||
"unit_system_imperial": "Imperial",
|
||||
"unit_system_metric": "Métrico",
|
||||
"imperial_example": "Fahrenheit, libras",
|
||||
"metric_example": "Celsius, kilogramos",
|
||||
"save_button": "Guardar"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -373,14 +388,14 @@
|
||||
"picker": {
|
||||
"header": "Editor de automatización",
|
||||
"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.",
|
||||
"pick_automation": "Elija la automatización para editar",
|
||||
"pick_automation": "Elije la automatización para editar",
|
||||
"no_automations": "No pudimos encontrar ninguna automatización editable",
|
||||
"add_automation": "Añadir automatización",
|
||||
"learn_more": "Aprende más sobre las automatizaciones"
|
||||
},
|
||||
"editor": {
|
||||
"introduction": "Utiliza automatizaciones para darle vida a tu hogar.",
|
||||
"default_name": "Nueva automatizacón",
|
||||
"default_name": "Nueva automatización",
|
||||
"save": "Guardar",
|
||||
"unsaved_confirm": "Tienes cambios sin guardar. ¿Estás seguro de que quieres salir?",
|
||||
"alias": "Nombre",
|
||||
@ -519,7 +534,7 @@
|
||||
"duplicate": "Duplicar",
|
||||
"delete": "Eliminar",
|
||||
"delete_confirm": "¿Seguro que quieres eliminarlo?",
|
||||
"unsupported_action": "Acción no admitida : {action}",
|
||||
"unsupported_action": "Acción no admitida: {action}",
|
||||
"type_select": "Tipo de acción",
|
||||
"type": {
|
||||
"service": {
|
||||
@ -528,7 +543,7 @@
|
||||
},
|
||||
"delay": {
|
||||
"label": "Retardo",
|
||||
"delay": "Demora"
|
||||
"delay": "Retardo"
|
||||
},
|
||||
"wait_template": {
|
||||
"label": "Esperar",
|
||||
@ -541,11 +556,13 @@
|
||||
"event": {
|
||||
"label": "Disparar evento",
|
||||
"event": "Evento:",
|
||||
"service_data": "Datos del servicio"
|
||||
"service_data": "Datos de servicio"
|
||||
}
|
||||
},
|
||||
"learn_more": "Aprende más sobre las acciones."
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Solo las automatizaciones en automations.yaml son editables.",
|
||||
"load_error_unknown": "Error al cargar la automatización ({err_no})."
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -564,7 +581,7 @@
|
||||
},
|
||||
"editor": {
|
||||
"rename_user": "Renombrar usuario",
|
||||
"change_password": "Cambia la contraseña",
|
||||
"change_password": "Cambiar la contraseña",
|
||||
"activate_user": "Activar usuario",
|
||||
"deactivate_user": "Desactivar usuario",
|
||||
"delete_user": "Borrar usuario",
|
||||
@ -580,8 +597,8 @@
|
||||
},
|
||||
"cloud": {
|
||||
"caption": "Nube Home Assistant",
|
||||
"description_login": "Ha iniciado sesión como {email}",
|
||||
"description_not_login": "No ha iniciado sesión",
|
||||
"description_login": "Has iniciado sesión como {email}",
|
||||
"description_not_login": "No has iniciado sesión",
|
||||
"description_features": "Control fuera de casa, integración con Alexa y Google Assistant."
|
||||
},
|
||||
"integrations": {
|
||||
@ -596,13 +613,13 @@
|
||||
"no_devices": "Esta integración no tiene dispositivos.",
|
||||
"no_device": "Entidades sin dispositivos",
|
||||
"delete_confirm": "¿Estás seguro de que quieres eliminar esta integración?",
|
||||
"restart_confirm": "Reinicie Home Assistant para terminar de eliminar esta integración.",
|
||||
"restart_confirm": "Reinicia Home Assistant para terminar de eliminar esta integración.",
|
||||
"manuf": "por {manufacturer}",
|
||||
"hub": "Conectado a través de",
|
||||
"via": "Conectado a través de",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "dispositivo no disponible",
|
||||
"entity_unavailable": "entidad no disponible",
|
||||
"no_area": "Ninguna área"
|
||||
"no_area": "Ningún área"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
@ -615,8 +632,8 @@
|
||||
"caption": "ZHA",
|
||||
"description": "Gestión de red de Zigbee Home Automation",
|
||||
"services": {
|
||||
"reconfigure": "Reconfigura el dispositivo ZHA (curar dispositivo). Usa esto si tienes problemas con el dispositivo. Si el dispositivo en cuestión es un dispositivo alimentado por batería, asegurate de que está activo y aceptando comandos cuando uses este servicio.",
|
||||
"updateDeviceName": "Establezca un nombre personalizado para este dispositivo en el registro de dispositivos.",
|
||||
"reconfigure": "Reconfigura el dispositivo ZHA (curar dispositivo). Usa esto si tienes problemas con el dispositivo. Si el dispositivo en cuestión es un dispositivo alimentado por batería, asegúrate de que está activo y aceptando comandos cuando uses este servicio.",
|
||||
"updateDeviceName": "Establece un nombre personalizado para este dispositivo en el registro de dispositivos.",
|
||||
"remove": "Eliminar un dispositivo de la red ZigBee."
|
||||
},
|
||||
"device_card": {
|
||||
@ -636,7 +653,7 @@
|
||||
"picker": {
|
||||
"header": "Registro de Área",
|
||||
"introduction": "Las áreas se utilizan para organizar dónde están los dispositivos. Esta información se utilizará en todo Home Assistant para ayudarte a organizar tu interfaz, permisos e integraciones con otros sistemas.",
|
||||
"introduction2": "Para colocar dispositivos en un área, utilice el siguiente enlace para navegar a la página de integraciones y luego haga clic en una integración configurada para llegar a las tarjetas de dispositivos.",
|
||||
"introduction2": "Para colocar dispositivos en un área, utiliza el siguiente enlace para navegar a la página de integraciones y luego haz clic en una integración configurada para llegar a las tarjetas de dispositivos.",
|
||||
"integrations_page": "Integraciones",
|
||||
"no_areas": "¡Parece que aún no tienes áreas!",
|
||||
"create_area": "CREAR ÁREA"
|
||||
@ -657,7 +674,7 @@
|
||||
"header": "Registro de Entidades",
|
||||
"unavailable": "(no disponible)",
|
||||
"introduction": "Home Assistant mantiene un registro de cada entidad que ha visto. Cada una de estas entidades tendrá una identificación asignada que se reservará sólo para esta entidad.",
|
||||
"introduction2": "Utilice el registro de entidades para anular el nombre, cambiar el ID de la entidad o eliminar la entrada de Home Assistant. Nota: la eliminación de la entrada del registro de entidades no eliminará la entidad. Para ello, siga el siguiente enlace y elimínelo de la página de integraciones.",
|
||||
"introduction2": "Utiliza el registro de entidades para anular el nombre, cambiar el ID de la entidad o eliminar la entrada de Home Assistant. Nota: la eliminación de la entrada del registro de entidades no eliminará la entidad. Para ello, sigue el siguiente enlace y elimínalo de la página de integraciones.",
|
||||
"integrations_page": "Integraciones"
|
||||
},
|
||||
"editor": {
|
||||
@ -711,8 +728,8 @@
|
||||
},
|
||||
"long_lived_access_tokens": {
|
||||
"header": "Tokens de acceso de larga duración",
|
||||
"description": "Crea tokens de acceso de larga duración para permitir que tus scripts interactúen con tu Home Assistant. Cada token será válido por 10 años desde la creación. Los siguientes tokens de acceso de larga duración están actualmente activos.",
|
||||
"learn_auth_requests": "Aprenda a realizar solicitudes autenticadas.",
|
||||
"description": "Crea tokens de acceso de larga duración para permitir que tus scripts interactúen con tu instancia de Home Assistant. Cada token será válido por 10 años desde la creación. Los siguientes tokens de acceso de larga duración están actualmente activos.",
|
||||
"learn_auth_requests": "Aprende cómo realizar solicitudes autenticadas.",
|
||||
"created_at": "Creado el {date}",
|
||||
"confirm_delete": "¿Estás seguro de que quieres eliminar el token de acceso para {name}?",
|
||||
"delete_failed": "Error al eliminar el token de acceso.",
|
||||
@ -724,11 +741,11 @@
|
||||
"last_used": "Último uso el {date} desde {location}",
|
||||
"not_used": "Nunca ha sido usado"
|
||||
},
|
||||
"current_user": "Has inciado sesión como {fullName} .",
|
||||
"current_user": "Has iniciado sesión como {fullName} .",
|
||||
"is_owner": "Eres propietario.",
|
||||
"logout": "Cerrar sesión",
|
||||
"change_password": {
|
||||
"header": "Cambiar Contraseña",
|
||||
"header": "Cambiar contraseña",
|
||||
"current_password": "Contraseña actual",
|
||||
"new_password": "Nueva contraseña",
|
||||
"confirm_new_password": "Confirmar nueva contraseña",
|
||||
@ -739,7 +756,7 @@
|
||||
"header": "Módulos de autenticación multifactor",
|
||||
"disable": "Deshabilitar",
|
||||
"enable": "Habilitar",
|
||||
"confirm_disable": "¿Estás seguro de que deseas deshabilitar {name} ?"
|
||||
"confirm_disable": "¿Estás seguro de que deseas deshabilitar {name}?"
|
||||
},
|
||||
"mfa_setup": {
|
||||
"title_aborted": "Abortado",
|
||||
@ -769,7 +786,7 @@
|
||||
},
|
||||
"mfa": {
|
||||
"data": {
|
||||
"code": "Código de autenticado de dos factores"
|
||||
"code": "Código de autenticación de dos factores"
|
||||
},
|
||||
"description": "Abre el **{mfa_module_name}** en tu dispositivo para ver tu código de autenticación de dos factores y verificar tu identidad:"
|
||||
}
|
||||
@ -779,7 +796,7 @@
|
||||
"invalid_code": "Código de autenticación inválido"
|
||||
},
|
||||
"abort": {
|
||||
"login_expired": "La sesión ha caducado, por favor inicie sesión de nuevo."
|
||||
"login_expired": "La sesión ha caducado, por favor inicia sesión de nuevo."
|
||||
}
|
||||
},
|
||||
"legacy_api_password": {
|
||||
@ -792,7 +809,7 @@
|
||||
},
|
||||
"mfa": {
|
||||
"data": {
|
||||
"code": "Código de autenticado de dos factores"
|
||||
"code": "Código de autenticación de dos factores"
|
||||
},
|
||||
"description": "Abra el ** {mfa_module_name} ** en su dispositivo para ver su código de autenticación de dos factores y verificar su identidad:"
|
||||
}
|
||||
@ -803,7 +820,7 @@
|
||||
},
|
||||
"abort": {
|
||||
"no_api_password_set": "No tienes una contraseña de API configurada.",
|
||||
"login_expired": "La sesión ha caducado, por favor inicie sesión de nuevo."
|
||||
"login_expired": "La sesión ha caducado, por favor inicia sesión de nuevo."
|
||||
}
|
||||
},
|
||||
"trusted_networks": {
|
||||
@ -829,17 +846,17 @@
|
||||
},
|
||||
"mfa": {
|
||||
"data": {
|
||||
"code": "Código de Autenticación de Doble Factor"
|
||||
"code": "Código de autenticación de dos factores"
|
||||
},
|
||||
"description": "Abre el **{mfa_module_name}** en tú dispositivo para ver tú código de autenticación de doble factor y verificar tu identidad"
|
||||
"description": "Abre el **{mfa_module_name}** en tu dispositivo para ver tu código de autenticación de dos factores y verificar tu identidad:"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"invalid_auth": "Usuario o contraseña incorrecto",
|
||||
"invalid_code": "Código de autenticación no válido"
|
||||
"invalid_auth": "Nombre de usuario o contraseña inválidos",
|
||||
"invalid_code": "Código de autenticación inválido"
|
||||
},
|
||||
"abort": {
|
||||
"login_expired": "La sesión ha caducado, por favor inicie sesión de nuevo."
|
||||
"login_expired": "La sesión ha caducado, por favor inicia sesión de nuevo."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -858,14 +875,22 @@
|
||||
},
|
||||
"create_account": "Crear una cuenta",
|
||||
"error": {
|
||||
"required_fields": "Complete todos los campos requeridos",
|
||||
"required_fields": "Completa todos los campos requeridos",
|
||||
"password_not_match": "Las contraseñas no coinciden"
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"intro": "Los dispositivos y servicios están representados en Home Assistant como integraciones. Puede configurarlos ahora, o hacerlo más tarde desde la pantalla de configuración.",
|
||||
"intro": "Los dispositivos y servicios están representados en Home Assistant como integraciones. Puedes configurarlos ahora, o hacerlo más tarde desde la pantalla de configuración.",
|
||||
"more_integrations": "Más",
|
||||
"finish": "Terminar"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Hola {name}, bienvenido a Home Assistant. ¿Cómo te gustaría llamar a tu casa?",
|
||||
"intro_location": "Nos gustaría saber dónde vives. Esta información ayudará a mostrar información y a configurar automatizaciones basadas en el sol. Estos datos nunca se comparten fuera de tu red.",
|
||||
"intro_location_detect": "Podemos ayudarte a completar esta información haciendo una solicitud única a un servicio externo.",
|
||||
"location_name_default": "Casa",
|
||||
"button_detect": "Detectar",
|
||||
"finish": "Siguiente"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -894,7 +919,7 @@
|
||||
"header": "Configuración de la tarjeta",
|
||||
"save": "Guardar",
|
||||
"toggle_editor": "Alternar editor",
|
||||
"pick_card": "Escoge la tarjeta que desea agregar.",
|
||||
"pick_card": "Escoge la tarjeta que deseas agregar.",
|
||||
"add": "Añadir tarjeta",
|
||||
"edit": "Editar",
|
||||
"delete": "Eliminar",
|
||||
@ -902,7 +927,7 @@
|
||||
},
|
||||
"migrate": {
|
||||
"header": "Configuración incompatible",
|
||||
"para_no_id": "Este elemento no tiene un ID. Por favor agregue uno este elemento en 'ui-lovelace.yaml'.",
|
||||
"para_no_id": "Este elemento no tiene un ID. Por favor agrega uno a este elemento en 'ui-lovelace.yaml'.",
|
||||
"para_migrate": "Home Assistant puede añadir ID's a todas tus tarjetas y vistas automáticamente pulsando el botón 'Migrar configuración'.",
|
||||
"migrate": "Migrar configuración"
|
||||
},
|
||||
@ -934,12 +959,17 @@
|
||||
"configure_ui": "Configurar la interfaz de usuario",
|
||||
"unused_entities": "Entidades no utilizadas",
|
||||
"help": "Ayuda",
|
||||
"refresh": "Refrescar"
|
||||
"refresh": "Actualizar"
|
||||
},
|
||||
"warning": {
|
||||
"entity_not_found": "La entidad no esta disponible: {entity}",
|
||||
"entity_not_found": "La entidad no está disponible: {entity}",
|
||||
"entity_non_numeric": "La entidad no es numérica: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "La configuración de Lovelace se actualizó, ¿te gustaría volver a cargarla?",
|
||||
"refresh": "Actualizar"
|
||||
},
|
||||
"reload_lovelace": "Recargar Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
@ -1094,7 +1124,7 @@
|
||||
}
|
||||
},
|
||||
"history_charts": {
|
||||
"loading_history": "Cargando historial de estado ...",
|
||||
"loading_history": "Cargando historial de estado...",
|
||||
"no_history_found": "No se encontró historial de estado."
|
||||
}
|
||||
},
|
||||
@ -1103,7 +1133,7 @@
|
||||
"entity_turned_off": "Apagado {entity}.",
|
||||
"service_called": "Servicio {service} llamado.",
|
||||
"service_call_failed": "Error al llamar al servicio {service} .",
|
||||
"connection_lost": "Conexión perdida. Reconectando ..."
|
||||
"connection_lost": "Conexión perdida. Reconectando..."
|
||||
},
|
||||
"dialogs": {
|
||||
"more_info_settings": {
|
||||
@ -1117,8 +1147,8 @@
|
||||
},
|
||||
"sun": {
|
||||
"elevation": "Elevación",
|
||||
"rising": "Subiendo",
|
||||
"setting": "Ajuste"
|
||||
"rising": "Salida del sol",
|
||||
"setting": "Puesta de sol"
|
||||
},
|
||||
"updater": {
|
||||
"title": "Instrucciones de actualización"
|
||||
@ -1131,7 +1161,7 @@
|
||||
"confirm": "Guardar usuario"
|
||||
},
|
||||
"notification_drawer": {
|
||||
"click_to_configure": "Haga clic en el botón para configurar {entity}",
|
||||
"click_to_configure": "Haz clic en el botón para configurar {entity}",
|
||||
"empty": "Sin Notificaciones",
|
||||
"title": "Notificaciones"
|
||||
}
|
||||
|
@ -609,7 +609,7 @@
|
||||
"delete_confirm": "Oled kindel, et soovid selle sidumise kustutada?",
|
||||
"restart_confirm": "Selle sidumise lõplikuks eemaldamiseks taaskäivita Home Assistant",
|
||||
"manuf": "{manufacturer}",
|
||||
"hub": "Ühendatud",
|
||||
"via": "Ühendatud",
|
||||
"firmware": "Püsivara: {version}",
|
||||
"device_unavailable": "seade pole saadaval",
|
||||
"entity_unavailable": "üksus pole saadaval",
|
||||
|
@ -227,6 +227,10 @@
|
||||
"snowy": "برفی",
|
||||
"sunny": "آفتابی"
|
||||
},
|
||||
"timer": {
|
||||
"active": "فعال",
|
||||
"idle": "بیکار "
|
||||
},
|
||||
"person": {
|
||||
"home": "خانه",
|
||||
"not_home": "بیرون"
|
||||
@ -271,13 +275,24 @@
|
||||
"second": "ویرایشگر اتوماسیون اجازه می دهد تا شما را به ایجاد و ویرایش اتوماسیون بپردازید. لطفا پیوند زیر را بخوانید تا دستورالعمل ها را متوجه بشید تا مطمئن شوید که صفحه اصلی دستیار را به درستی پیکربندی کرده اید."
|
||||
},
|
||||
"panel": {
|
||||
"logbook": {
|
||||
"showing_entries": "نمایش نامه برای"
|
||||
},
|
||||
"config": {
|
||||
"introduction": "در اینجا می توانید اجزای خود و صفحه اصلی دستیار را پیکربندی کنید. ",
|
||||
"core": {
|
||||
"section": {
|
||||
"core": {
|
||||
"header": "پیکربندی و کنترل سرور",
|
||||
"introduction": "تغییر پیکربندی شما می تواند یک روند خسته کننده باشد. ما میدانیم. این بخش سعی خواهد کرد زندگی شما را کمی ساده تر کند.",
|
||||
"validation": {
|
||||
"heading": "تایید پیکربندی"
|
||||
},
|
||||
"reloading": {
|
||||
"heading": "بارگذاری مجدد پیکربندی",
|
||||
"introduction": "برخی از قسمت های Home Assistant می توانند بدون نیاز به راه اندازی مجدد مجدد بارگیری شوند. برای بارگذاری مجدد ضربه بزنید. پیکربندی کنونی خود را بارگیری و اطلاعات جدید را بارگذاری می کند.",
|
||||
"core": "بارگذاری مجدد ",
|
||||
"group": "بارگذاری مجدد گروه ها",
|
||||
"automation": "بازنگری automations",
|
||||
"script": "بازنگری اسکریپت"
|
||||
},
|
||||
@ -305,9 +320,14 @@
|
||||
"picker": {
|
||||
"header": "ویرایشگر اتوماسیون",
|
||||
"introduction": "ویرایشگر اتوماسیون اجازه می دهد تا شما را به ایجاد و ویرایش اتوماسیون بپردازید . لطفا پیوند زیر را بخوانید تا دستورالعمل ها را بخواند تا مطمئن شوید که صفحه اصلی دستیار را به درستی پیکربندی کرده اید.",
|
||||
"pick_automation": "انتخاب اتوماسیون برای ویرایش"
|
||||
"pick_automation": "انتخاب اتوماسیون برای ویرایش",
|
||||
"no_automations": "هیچ اتوماسیون قابل ویرایشی پیدا نشد",
|
||||
"add_automation": "اضافه کردن اتوماسیون",
|
||||
"learn_more": "درباره اتوماسیون بیشتر بدانید"
|
||||
},
|
||||
"editor": {
|
||||
"introduction": "از اتوماسیون استفاده کنید برای زنده کردن خانه",
|
||||
"default_name": "اضافه کردن اتوماسیون",
|
||||
"save": "ذخیره",
|
||||
"triggers": {
|
||||
"introduction": "راه حلی است که پردازش یک قانون اتوماسیون را آغاز می کند. ممکن است چند عامل برای یک قاعده مشخص شود. هنگامی که یک ماشه شروع می شود، Home Assistant شرایط را تایید می کند، اگر وجود داشته باشد، و اقدام را فراخوانی می کند.",
|
||||
@ -332,7 +352,8 @@
|
||||
"enter": "ورود",
|
||||
"leave": "ترک کردن"
|
||||
}
|
||||
}
|
||||
},
|
||||
"learn_more": "درباره ماشه بیشتر بدانید"
|
||||
},
|
||||
"conditions": {
|
||||
"introduction": "شرایط یک بخش اختیاری از یک قانون اتوماسیون است و می تواند مورد استفاده قرار گیرد تا از وقوع رویداد زمانی که باعث ایجاد فعالیت می شود جلوگیری شود. شرایط بسیار شبیه به ماژورها هستند اما خیلی متفاوت هستند. یک ماشه به حوادث اتفاق می افتد در سیستم نگاه کنید، در حالی که یک وضعیت فقط به نظر می رسد که سیستم به نظر می رسد در حال حاضر. یک ماشه می تواند مشاهده کند که سوئیچ روشن است. یک وضعیت فقط می تواند ببینید که آیا یک سوئیچ در حال حاضر روشن یا خاموش است.",
|
||||
@ -468,6 +489,18 @@
|
||||
"device_tracker_pick": "دستگاه را برای پیگیری انتخاب کنید"
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
"editor": {
|
||||
"caption": "مشاهده کاربر"
|
||||
},
|
||||
"add_user": {
|
||||
"caption": "افزودن کاربر",
|
||||
"name": "نام",
|
||||
"username": "نام کاربری",
|
||||
"password": "رمز عبور",
|
||||
"create": "ایجاد"
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
"description_features": "کنترل کردن از خانه، ادغام با Alexa و Google Assistant."
|
||||
}
|
||||
@ -511,7 +544,8 @@
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"invalid_auth": "کد احراز هویت نامعتبر"
|
||||
"invalid_auth": "کد احراز هویت نامعتبر",
|
||||
"invalid_code": "کد احراز هویت نامعتبر"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -603,6 +637,9 @@
|
||||
},
|
||||
"forecast": "پیش بینی"
|
||||
},
|
||||
"lock": {
|
||||
"lock": "قفل"
|
||||
},
|
||||
"alarm_control_panel": {
|
||||
"arm_night": "نوبت شب",
|
||||
"arm_custom_bypass": "بایگانی سفارشی"
|
||||
|
@ -279,7 +279,8 @@
|
||||
"state_badge": {
|
||||
"default": {
|
||||
"unknown": "Tunt",
|
||||
"unavailable": "Ei saat"
|
||||
"unavailable": "Ei saat",
|
||||
"error": "Virhe"
|
||||
},
|
||||
"alarm_control_panel": {
|
||||
"armed": "Viritetty",
|
||||
@ -353,6 +354,17 @@
|
||||
"introduction": "Hallitse Home Assistantia... suoraan Home Assistantista",
|
||||
"restart": "Käynnistä uudelleen",
|
||||
"stop": "Pysäytä"
|
||||
},
|
||||
"core_config": {
|
||||
"location_name": "Home Assistant -järjestelmäsi nimi",
|
||||
"latitude": "Leveysaste",
|
||||
"longitude": "Pituusaste",
|
||||
"elevation": "Korkeus merenpinnasta",
|
||||
"elevation_meters": "metriä",
|
||||
"time_zone": "Aikavyöhyke",
|
||||
"imperial_example": "Fahrenheit, paunaa",
|
||||
"metric_example": "Celsius, kilogrammat",
|
||||
"save_button": "Tallenna"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -534,7 +546,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "Lisätietoja toiminnoista"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Vain automaatiot tiedostossa automations.yaml ovat muokattavissa",
|
||||
"load_error_unknown": "Virhe ladatessa automaatiota ( {err_no} )"
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -586,7 +600,7 @@
|
||||
"delete_confirm": "Haluatko varmasti poistaa tämän integraation?",
|
||||
"restart_confirm": "Käynnistä Home Assistant uudellen viimeistelläksesi tämän integraation poistamisen",
|
||||
"manuf": "{manufacturer}",
|
||||
"hub": "Yhdistetty kautta",
|
||||
"via": "Yhdistetty kautta",
|
||||
"firmware": "Laiteohjelmisto: {version}",
|
||||
"device_unavailable": "laite ei saatavissa",
|
||||
"entity_unavailable": "kohde ei saatavilla",
|
||||
@ -595,24 +609,35 @@
|
||||
},
|
||||
"zha": {
|
||||
"caption": "ZHA",
|
||||
"description": "ZigBee kotiautomaation verkonhallinta"
|
||||
"description": "ZigBee kotiautomaation verkonhallinta",
|
||||
"device_card": {
|
||||
"area_picker_label": "Alue"
|
||||
},
|
||||
"add_device_page": {
|
||||
"spinner": "Etsitään ZHA Zigbee laitteita..."
|
||||
}
|
||||
},
|
||||
"entity_registry": {
|
||||
"description": "Yleiskuva kaikista tunnetuista entiteeteistä.",
|
||||
"editor": {
|
||||
"default_name": "Uusi alue"
|
||||
},
|
||||
"picker": {
|
||||
"unavailable": "(ei saatavilla)",
|
||||
"integrations_page": "Integraatiot"
|
||||
},
|
||||
"editor": {
|
||||
"default_name": "Uusi alue",
|
||||
"delete": "POISTA"
|
||||
}
|
||||
},
|
||||
"area_registry": {
|
||||
"picker": {
|
||||
"header": "Aluekisteri",
|
||||
"integrations_page": "Integraatiot"
|
||||
"integrations_page": "Integraatiot",
|
||||
"no_areas": "Et ole vielä luonut alueita!",
|
||||
"create_area": "LUO ALUE"
|
||||
},
|
||||
"editor": {
|
||||
"default_name": "Uusi alue"
|
||||
"default_name": "Uusi alue",
|
||||
"create": "LUO"
|
||||
}
|
||||
},
|
||||
"person": {
|
||||
@ -767,8 +792,16 @@
|
||||
"username": "Käyttäjätunnus",
|
||||
"password": "Salasana"
|
||||
}
|
||||
},
|
||||
"mfa": {
|
||||
"data": {
|
||||
"code": "Kaksivaiheinen tunnistuskoodi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"invalid_auth": "Väärä käyttäjänimi tai salasana"
|
||||
},
|
||||
"abort": {
|
||||
"login_expired": "Istunto päättyi, ole hyvä ja kirjaudu uudelleen."
|
||||
}
|
||||
@ -784,12 +817,23 @@
|
||||
"data": {
|
||||
"name": "Nimi",
|
||||
"username": "Käyttäjätunnus",
|
||||
"password": "Salasana"
|
||||
"password": "Salasana",
|
||||
"password_confirm": "Vahvista salasana"
|
||||
},
|
||||
"create_account": "Luo tili",
|
||||
"error": {
|
||||
"required_fields": "Täytä kaikki pakolliset kentät"
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"more_integrations": "Lisää",
|
||||
"finish": "Valmis"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Hei {name}, tervetuloa Home Assistant -käyttäjäksi. Kuinka haluaisit nimetä uuden kotisi?",
|
||||
"location_name_default": "Koti",
|
||||
"button_detect": "Havaitse",
|
||||
"finish": "Seuraava"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -854,7 +898,11 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Yksikkö ei ole käytettävissä: {entity}",
|
||||
"entity_non_numeric": "Yksikkö ei ole numeerinen: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"refresh": "Päivitä"
|
||||
},
|
||||
"reload_lovelace": "Lataa Lovelace uudelleen"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Êtes-vous sûr de vouloir supprimer cette intégration?",
|
||||
"restart_confirm": "Redémarrez Home Assistant pour terminer la suppression de cette intégration",
|
||||
"manuf": "par {manufacturer}",
|
||||
"hub": "Connecté via",
|
||||
"via": "Connecté via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "appareil indisponible",
|
||||
"entity_unavailable": "entité indisponible",
|
||||
@ -885,7 +885,7 @@
|
||||
"finish": "Terminer"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Bonjour {name} , bienvenue dans Home Assistant. Comment voudriez-vous nommer votre maison?",
|
||||
"intro": "Bonjour {name}, bienvenue dans Home Assistant. Comment voudriez-vous nommer votre maison?",
|
||||
"intro_location": "Nous aimerions savoir où vous habitez. Ces informations vous aideront à afficher des informations et à configurer des automatismes basés sur le soleil. Ces données ne sont jamais partagées en dehors de votre réseau.",
|
||||
"intro_location_detect": "Nous pouvons vous aider à renseigner ces informations en adressant une demande unique à un service externe.",
|
||||
"location_name_default": "Maison",
|
||||
@ -939,9 +939,9 @@
|
||||
"delete": "Supprimer la vue"
|
||||
},
|
||||
"save_config": {
|
||||
"header": "Prenez le controle de Lovelace UI",
|
||||
"header": "Prenez le contrôle de votre Interface Lovelace",
|
||||
"para": "Par défaut, Home Assistant maintient votre interface utilisateur et la met à jour lorsque de nouvelles entités ou de nouveaux composants Lovelace sont disponibles. Si vous prenez le contrôle, nous ne ferons plus les changements automatiquement pour vous.",
|
||||
"para_sure": "Êtes-vous sûr de vouloir prendre le controle de l'interface utilisateur?",
|
||||
"para_sure": "Êtes-vous sûr de vouloir prendre le contrôle de l'interface utilisateur?",
|
||||
"cancel": "Oublie ce que j'ai dit, c'est pas grave.",
|
||||
"save": "Prenez le contrôle"
|
||||
},
|
||||
@ -966,7 +966,7 @@
|
||||
"entity_non_numeric": "L'entité est non numérique: {entity}"
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "La configuration de Lovelace á été changé, voulez-vous rafraîchir?",
|
||||
"message": "La configuration de Lovelace a été modifiée, voulez-vous rafraîchir?",
|
||||
"refresh": "Rafraîchir"
|
||||
},
|
||||
"reload_lovelace": "Recharger Lovelace"
|
||||
|
@ -386,7 +386,7 @@
|
||||
"configure": "Konfiguriärä",
|
||||
"config_entry": {
|
||||
"manuf": "vo {manufacturer}",
|
||||
"hub": "Verbunge über",
|
||||
"via": "Verbunge über",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "Grät verfüägbar",
|
||||
"entity_unavailable": "Entitiy verfüägbar"
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "האם אתה בטוח שברצונך למחוק אינטגרציה זו?",
|
||||
"restart_confirm": "הפעל מחדש את Home Assistant כדי להשלים את הסרת האינטגרציה",
|
||||
"manuf": "על ידי {manufacturer}",
|
||||
"hub": "מחובר באמצעות",
|
||||
"via": "מחובר באמצעות",
|
||||
"firmware": "קושחה: {version}",
|
||||
"device_unavailable": "התקן אינו זמין",
|
||||
"entity_unavailable": "ישות לא זמינה",
|
||||
|
@ -533,7 +533,7 @@
|
||||
"delete_confirm": "Jeste li sigurni da želite izbrisati tu integraciju?",
|
||||
"restart_confirm": "Ponovo pokrenite Home Assistant da biste dovršili uklanjanje ove integracije",
|
||||
"manuf": "od {manufacturer}",
|
||||
"hub": "Povezan putem",
|
||||
"via": "Povezan putem",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "uređaj nije dostupan",
|
||||
"entity_unavailable": "entitet nije dostupan"
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Biztosan törölni szeretnéd ezt az integrációt?",
|
||||
"restart_confirm": "Indítsd újra a Home Assistant-ot az integráció törlésének befejezéséhez",
|
||||
"manuf": "{manufacturer} által",
|
||||
"hub": "Kapcsolódva",
|
||||
"via": "Kapcsolódva",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "eszköz nem érhető el",
|
||||
"entity_unavailable": "entitás nem érhető el",
|
||||
|
@ -296,6 +296,13 @@
|
||||
"introduction": "Stjórna Home Assistant miðlara... frá Home Assistant.",
|
||||
"restart": "Endurræsa",
|
||||
"stop": "Stöðva"
|
||||
},
|
||||
"core_config": {
|
||||
"latitude": "Breiddargráða",
|
||||
"longitude": "Lengdargráða",
|
||||
"elevation": "Hækkun",
|
||||
"time_zone": "Tímabelti",
|
||||
"save_button": "Vista"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -510,11 +517,16 @@
|
||||
"delete_confirm": "Ertu viss um að þú viljir eyða þessari samþættingu?",
|
||||
"restart_confirm": "Endurræsa Home Assitant til að klára að fjarlægja þessa samþættingu",
|
||||
"manuf": "eftir {manufacturer}",
|
||||
"hub": "Tengt gegnum",
|
||||
"via": "Tengt gegnum",
|
||||
"firmware": "Fastbúnaðarútgáfa: {version}",
|
||||
"device_unavailable": "Tæki ekki tiltækt",
|
||||
"entity_unavailable": "Eining ekki tiltæk",
|
||||
"no_area": "Ekkert svæði"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
"open_site": "Opna vefsíðu"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
@ -755,6 +767,10 @@
|
||||
"required_fields": "Fylltu út í alla nauðsynlega reiti",
|
||||
"password_not_match": "Lykilorð passa ekki saman"
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"more_integrations": "Meira",
|
||||
"finish": "Ljúka"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
|
@ -357,7 +357,7 @@
|
||||
"stop": "Stop"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Editor disabilitato perché la configurazione memorizzata in configuration.yaml.",
|
||||
"edit_requires_storage": "Editor disabilitato perché la configurazione è memorizzata in configuration.yaml.",
|
||||
"location_name": "Nome della tua installazione di Home Assistant",
|
||||
"latitude": "Latitudine",
|
||||
"longitude": "Logitudine",
|
||||
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Sei sicuro di voler eliminare questa integrazione?",
|
||||
"restart_confirm": "Riavvia Home Assistant per completare la rimozione di questa integrazione",
|
||||
"manuf": "da {manufacturer}",
|
||||
"hub": "Connesso tramite",
|
||||
"via": "Connesso tramite",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "dispositivo non disponibile",
|
||||
"entity_unavailable": "entità non disponibile",
|
||||
@ -964,7 +964,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Entità non disponibile: {entity}",
|
||||
"entity_non_numeric": "L'entità non è numerica: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "La configurazione di Lovelace è stata aggiornata, desideri aggiornare?",
|
||||
"refresh": "Aggiorna"
|
||||
},
|
||||
"reload_lovelace": "Ricarica Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
@ -1146,7 +1151,7 @@
|
||||
"setting": "Tramonto"
|
||||
},
|
||||
"updater": {
|
||||
"title": "Aggiorna istruzioni"
|
||||
"title": "Istruzioni per l'aggiornamento"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -357,8 +357,8 @@
|
||||
"stop": "중지"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "구성내용이 configuration.yaml 에 저장되어있기 때문에 편집기가 비활성화 되었습니다.",
|
||||
"location_name": "Home Assistant 설치 위치명",
|
||||
"edit_requires_storage": "구성내용이 configuration.yaml 에 저장되어 있기 때문에 편집기가 비활성화 되었습니다.",
|
||||
"location_name": "Home Assistant 이름",
|
||||
"latitude": "위도",
|
||||
"longitude": "경도",
|
||||
"elevation": "고도",
|
||||
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "이 통합 구성요소를 제거 하시겠습니까?",
|
||||
"restart_confirm": "통합 구성요소 제거 완료를 위해 Home Assistant 웹 페이지를 다시 불러옵니다",
|
||||
"manuf": "{manufacturer} 제조",
|
||||
"hub": "연결 경유 대상",
|
||||
"via": "연결 경유 대상",
|
||||
"firmware": "펌웨어: {version}",
|
||||
"device_unavailable": "기기 사용불가",
|
||||
"entity_unavailable": "구성요소 사용불가",
|
||||
@ -653,7 +653,7 @@
|
||||
"picker": {
|
||||
"header": "영역 등록",
|
||||
"introduction": "영역은 기기가있는 위치를 구성하는데 사용합니다. 이 정보는 Home Assistant 의 인터페이스 정리, 권한 및 다른 시스템과의 통합 구성에 도움을 줍니다.",
|
||||
"introduction2": "특정 영역에 기기를 배치하려면 아래 링크를 따라 통합 구성요소 페이지로 이동 한 다음, 설정된 구성요소의 기기를 클릭하여 영역을 설정 할 수 있습니다.",
|
||||
"introduction2": "특정 영역에 기기를 배치하려면 아래 링크를 따라 통합 구성요소 페이지로 이동 한 다음, 설정된 구성요소의 기기를 클릭하여 영역을 설정해주세요.",
|
||||
"integrations_page": "통합 구성요소 페이지",
|
||||
"no_areas": "등록된 영역이 없습니다. 거실, 침실과 같이 영역을 등록해보세요!",
|
||||
"create_area": "영역 만들기"
|
||||
@ -673,8 +673,8 @@
|
||||
"picker": {
|
||||
"header": "구성요소",
|
||||
"unavailable": "(사용불가)",
|
||||
"introduction": "Home Assistant 는 구성요소의 식별을 위해 모든 구성요소에 대해 고유한 레지스트리를 유지합니다. 각각의 구성요소들은 자신만의 고유한 구성요소 ID 를 가집니다.",
|
||||
"introduction2": "구성요소 편집을 사용하여 이름을 대체하거나 구성요소 ID를 변경하거나 Home Assistant 에서 항목을 제거할 수 있습니다. 단, 구성요소 편집창에서 구성요소를 삭제해도 구성요소가 완전히 제거되는것은 아닙니다. 완전히 제거하려면, 아래 링크를 따라 통합 구성요소 페이지에서 제거해주세요.",
|
||||
"introduction": "Home Assistant 는 구성요소의 식별을 위해 모든 구성요소에 고유한 레지스트리를 부여합니다. 각각의 구성요소들은 자신만의 고유한 구성요소 ID 를 가집니다.",
|
||||
"introduction2": "구성요소를 편집하여 이름을 대체하거나 구성요소 ID를 변경하거나 Home Assistant 에서 항목을 제거할 수 있습니다. 단, 구성요소 편집창에서 구성요소를 삭제해도 구성요소가 완전히 제거되는것은 아닙니다. 완전히 제거하려면, 아래 링크를 따라 통합 구성요소 페이지에서 제거해주세요.",
|
||||
"integrations_page": "통합 구성요소 페이지"
|
||||
},
|
||||
"editor": {
|
||||
@ -880,7 +880,7 @@
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"intro": "기기 및 서비스는 Home Assistant 에서 통합 구성요소로 표시됩니다. 지금 구성하거나 설정 화면에서 나중에 구성할 수 있습니다.",
|
||||
"intro": "기기 및 서비스는 Home Assistant 에서 통합 구성요소로 표시됩니다. 지금 구성하거나 나중에 설정 화면에서 구성할 수 있습니다.",
|
||||
"more_integrations": "더보기",
|
||||
"finish": "완료"
|
||||
},
|
||||
|
@ -334,17 +334,17 @@
|
||||
"section": {
|
||||
"core": {
|
||||
"header": "Konfiguratioun an Server Kontroll",
|
||||
"introduction": "D'Ännere vun der Konfiguratioun kann e lästege Prozess sinn. Mir wëssen dat. Dës Sektioun probéiert fir Äert Liewen e bësse méi einfach ze maachen.",
|
||||
"introduction": "D'Ännere vun der Konfiguratioun kann e lästege Prozess sinn. Mir wëssen dat. Dës Sektioun probéiert fir Äert Liewen e bësse méi einfach ze maachen.",
|
||||
"validation": {
|
||||
"heading": "Validatioun vun der Konfiguratioun",
|
||||
"heading": "Validatioun vun der Konfiguratioun",
|
||||
"introduction": "Validéiert är Konfiguratioun wann Dir viru kuerzem e puer Ännerungen an ärer Konfiguratioun gemaacht hutt a wëllt sécher sinn datt alles gëlteg ass",
|
||||
"check_config": "Konfiguratioun iwwerpréiwen",
|
||||
"valid": "Konfiguratioun gëlteg!",
|
||||
"invalid": "Konfiguratioun ongëlteg"
|
||||
},
|
||||
"reloading": {
|
||||
"heading": "Konfiguratioun gëtt frësch gelueden",
|
||||
"introduction": "E puer Deeler vum Home Assistant kënne frësch geluede ginn ouni datt een Neistart néideg ass. Klick op nei luede fir di aktuell Konfiguratioun z'entlueden an di nei Konfiguratioun ze lueden.",
|
||||
"heading": "Konfiguratioun gëtt frësch gelueden",
|
||||
"introduction": "E puer Deeler vum Home Assistant kënne frësch geluede ginn ouni datt een Neistart néideg ass. Klick op nei luede fir di aktuell Konfiguratioun z'entlueden an di nei Konfiguratioun ze lueden.",
|
||||
"core": "Kär nei lueden",
|
||||
"group": "Gruppe nei lueden",
|
||||
"automation": "Automatismen nei lueden",
|
||||
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Sécher fir dës Integratioun ze läsche?",
|
||||
"restart_confirm": "Start Home Assistant nei fir dës Integratioun ze läschen",
|
||||
"manuf": "vun {manufacturer}",
|
||||
"hub": "Verbonnen via",
|
||||
"via": "Verbonnen via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "Apparat net erreechbar",
|
||||
"entity_unavailable": "Entitéit net erreechbar",
|
||||
@ -966,9 +966,10 @@
|
||||
"entity_non_numeric": "Entitéit ass net numerescher Natur: {entity}"
|
||||
},
|
||||
"changed_toast": {
|
||||
"refresh": "Odśwież"
|
||||
"message": "Lovelace Konfiguratioun gouf geännert, soll frësch geluede ginn?",
|
||||
"refresh": "Frësch lueden"
|
||||
},
|
||||
"reload_lovelace": "Przeładuj Lovelace"
|
||||
"reload_lovelace": "Lovelace frësch lueden"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
|
@ -568,7 +568,7 @@
|
||||
"delete_confirm": "Vai tiešām vēlaties dzēst šo integrāciju?",
|
||||
"restart_confirm": "Restartēt Home Assistant, lai pabeigtu šīs integrācijas noņemšanu",
|
||||
"manuf": "{manufacturer}",
|
||||
"hub": "Savienots ar",
|
||||
"via": "Savienots ar",
|
||||
"firmware": "Programmaparatūra: {version}",
|
||||
"device_unavailable": "ierīce nav pieejama",
|
||||
"entity_unavailable": "vienība nav pieejama"
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Er du sikker på at du vil slette denne integrasjonen?",
|
||||
"restart_confirm": "Start Home Assistant på nytt for å fullføre fjerningen av denne integrasjonen",
|
||||
"manuf": "av {manufacturer}",
|
||||
"hub": "Tilkoblet via",
|
||||
"via": "Tilkoblet via",
|
||||
"firmware": "Fastvare: {version}",
|
||||
"device_unavailable": "enheten er utilgjengelig",
|
||||
"entity_unavailable": "oppføringen er utilgjengelig",
|
||||
|
@ -355,6 +355,21 @@
|
||||
"introduction": "Beheer je Home Assistant-server ... vanuit Home Assistant.",
|
||||
"restart": "Herstarten",
|
||||
"stop": "Stop"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Editor uitgeschakeld omdat de configuratie is opgeslagen in configuration.yaml",
|
||||
"location_name": "Naam van Home Assistant installatie",
|
||||
"latitude": "Breedtegraad",
|
||||
"longitude": "Lengtegraad",
|
||||
"elevation": "Hoogte",
|
||||
"elevation_meters": "meter",
|
||||
"time_zone": "Tijdzone",
|
||||
"unit_system": "Maatsysteem",
|
||||
"unit_system_imperial": "Imperiaal",
|
||||
"unit_system_metric": "Metrisch",
|
||||
"imperial_example": "Fahrenheit, ponden",
|
||||
"metric_example": "Celsius, kilogram",
|
||||
"save_button": "Opslaan"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -545,7 +560,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "Meer informatie over acties"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Alleen automatiseringen in automations.yaml kunnen worden bewerkt.",
|
||||
"load_error_unknown": "Fout bij laden van automatisering ({err_no})."
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -598,11 +615,11 @@
|
||||
"delete_confirm": "Weet u zeker dat u deze integratie wilt verwijderen?",
|
||||
"restart_confirm": "Herstart Home Assistant om het verwijderen van deze integratie te voltooien",
|
||||
"manuf": "door {manufacturer}",
|
||||
"hub": "Verbonden via",
|
||||
"via": "Verbonden via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "apparaat niet beschikbaar",
|
||||
"entity_unavailable": "entiteit niet beschikbaar",
|
||||
"no_area": "Geen gebied"
|
||||
"no_area": "Geen Gebied"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
@ -636,7 +653,7 @@
|
||||
"picker": {
|
||||
"header": "Gebiedenregister",
|
||||
"introduction": "Gebieden worden gebruikt om te bepalen waar apparaten zijn. Deze informatie wordt overal in de Home Assistant gebruikt om u te helpen bij het organiseren van uw interface, machtigingen en integraties met andere systemen.",
|
||||
"introduction2": "Als u apparaten in een gebied wilt plaatsen, gebruikt u de onderstaande koppeling om naar de integratiespagina te gaan en vervolgens op een geconfigureerde integratie te klikken om naar de apparaatkaarten te gaan.",
|
||||
"introduction2": "Als u apparaten in een Gebied wilt plaatsen, gebruikt u de onderstaande koppeling om naar de integratiespagina te gaan en vervolgens op een geconfigureerde integratie te klikken om naar de apparaatkaarten te gaan.",
|
||||
"integrations_page": "Integratiespagina",
|
||||
"no_areas": "Het lijkt erop dat je nog geen ruimtes hebt!",
|
||||
"create_area": "MAAK RUIMTE"
|
||||
@ -644,17 +661,17 @@
|
||||
"no_areas": "Het lijkt erop dat je nog geen gebieden hebt!",
|
||||
"create_area": "MAAK GEBIED",
|
||||
"editor": {
|
||||
"default_name": "Nieuw gebied",
|
||||
"default_name": "Nieuw Gebied",
|
||||
"delete": "VERWIJDEREN",
|
||||
"update": "BIJWERKEN",
|
||||
"create": "MAKEN"
|
||||
}
|
||||
},
|
||||
"entity_registry": {
|
||||
"caption": "Entiteiten register",
|
||||
"description": "Overzicht van alle gekende entiteiten",
|
||||
"caption": "Entiteitenregister",
|
||||
"description": "Overzicht van alle geregistreerde entiteiten",
|
||||
"picker": {
|
||||
"header": "Entiteiten register",
|
||||
"header": "Entiteitenregister",
|
||||
"unavailable": "(niet beschikbaar)",
|
||||
"introduction": "Home Assistant houdt een register bij van elke entiteit die het ooit heeft gezien en die uniek kan worden geïdentificeerd. Elk van deze entiteiten krijgt een entiteit-ID toegewezen die alleen voor deze entiteit wordt gereserveerd.",
|
||||
"introduction2": "Gebruik het entiteitenregister om de naam te overschrijven, de entiteits-ID te wijzigen of het item te verwijderen uit de Home Assistant. Opmerking: als u de entiteitsregistervermelding verwijdert, wordt de entiteit niet verwijderd. Hiertoe volgt u de onderstaande koppeling en verwijdert u deze van de integratiespagina.",
|
||||
@ -662,7 +679,7 @@
|
||||
},
|
||||
"editor": {
|
||||
"unavailable": "Deze entiteit is momenteel niet beschikbaar.",
|
||||
"default_name": "Nieuw gebied",
|
||||
"default_name": "Nieuw Gebied",
|
||||
"delete": "VERWIJDEREN",
|
||||
"update": "BIJWERKEN"
|
||||
}
|
||||
@ -866,6 +883,14 @@
|
||||
"intro": "Apparaten en services worden in Home Assistant weergegeven als integraties. U kunt ze nu instellen of later via het configuratiescherm.",
|
||||
"more_integrations": "Meer",
|
||||
"finish": "Voltooien"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Hallo {name} , welkom bij Home Assistant. Welke naam wil je je huis geven?",
|
||||
"intro_location": "We willen graag weten waar je woont. Deze informatie zal helpen bij het weergeven van informatie en het instellen van zongebaseerde automatiseringen. Deze gegevens worden nooit gedeeld buiten uw netwerk.",
|
||||
"intro_location_detect": "Wij kunnen u helpen deze informatie in te vullen door een eenmalig verbinding te maken met een externe service.",
|
||||
"location_name_default": "Huis",
|
||||
"button_detect": "Detecteren",
|
||||
"finish": "Volgende"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -939,7 +964,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Entiteit niet beschikbaar: {entity}",
|
||||
"entity_non_numeric": "Entiteit is niet-numeriek: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "De Lovelace configuratie is bijgewerkt. Wil je de pagina vernieuwen?",
|
||||
"refresh": "Vernieuwen"
|
||||
},
|
||||
"reload_lovelace": "Lovelace herladen"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
@ -1121,7 +1151,7 @@
|
||||
"setting": "Ondergang"
|
||||
},
|
||||
"updater": {
|
||||
"title": "Instructies bijwerken"
|
||||
"title": "Update-instructies"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -613,7 +613,7 @@
|
||||
"delete_confirm": "Er du sikker på at du vil slette denne integrasjonen?",
|
||||
"restart_confirm": "Restart Home Assistant for å fjerne denne integrasjonen",
|
||||
"manuf": "av {manufacturer}",
|
||||
"hub": "Tilkopla via",
|
||||
"via": "Tilkopla via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "Eininga utilgjengelig",
|
||||
"entity_unavailable": "Oppføringa utilgjengelig",
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Czy na pewno chcesz usunąć tę integrację?",
|
||||
"restart_confirm": "Zrestartuj Home Assistant'a, aby zakończyć usuwanie tej integracji",
|
||||
"manuf": "przez: {manufacturer}",
|
||||
"hub": "Połączony przez",
|
||||
"via": "Połączony przez",
|
||||
"firmware": "Oprogramowanie: {version}",
|
||||
"device_unavailable": "urządzenie niedostępne",
|
||||
"entity_unavailable": "encja niedostępna",
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Tem certeza de que deseja excluir essa integração?",
|
||||
"restart_confirm": "Reinicie o Home Assistant para concluir a remoção dessa integração",
|
||||
"manuf": "por {manufacturer}",
|
||||
"hub": "Conectado via",
|
||||
"via": "Conectado via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "dispositivo indisponível",
|
||||
"entity_unavailable": "entidade indisponível",
|
||||
|
@ -596,7 +596,7 @@
|
||||
"delete_confirm": "Tem a certeza que pretende apagar esta integração?",
|
||||
"restart_confirm": "Reinicie o Home Assistant para concluir a remoção desta integração",
|
||||
"manuf": "por {manufacturer}",
|
||||
"hub": "Ligado via",
|
||||
"via": "Ligado via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "Dispositivo indisponível",
|
||||
"entity_unavailable": "Entidade indisponível",
|
||||
|
@ -547,7 +547,7 @@
|
||||
"delete_confirm": "Sigur doriți să ștergeți această integrare?",
|
||||
"restart_confirm": "Reporniți Home Assistant pentru a termina eliminarea acestei integrări",
|
||||
"manuf": "de {manufacturer}",
|
||||
"hub": "Conectat prin",
|
||||
"via": "Conectat prin",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "dispozitiv indisponibil",
|
||||
"entity_unavailable": "Entitatea nu este disponibilă"
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Вы уверены, что хотите удалить эту интеграцию?",
|
||||
"restart_confirm": "Перезапустите Home Assistant, чтобы завершить удаление этой интеграции",
|
||||
"manuf": "{manufacturer}",
|
||||
"hub": "Подключено через",
|
||||
"via": "Подключено через",
|
||||
"firmware": "Прошивка: {version}",
|
||||
"device_unavailable": "устройство недоступно",
|
||||
"entity_unavailable": "объект недоступен",
|
||||
@ -788,7 +788,7 @@
|
||||
"data": {
|
||||
"code": "Код двухфакторной аутентификации"
|
||||
},
|
||||
"description": "Откройте **{mfa_module_name}** на вашем устройстве для просмотра кода двухфакторной аутентификации и введите его для подтверждения:"
|
||||
"description": "Введите код двухфакторной аутентификации, полученный от **{mfa_module_name}**:"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
@ -811,7 +811,7 @@
|
||||
"data": {
|
||||
"code": "Код двухфакторной аутентификации"
|
||||
},
|
||||
"description": "Откройте **{mfa_module_name}** на вашем устройстве для просмотра кода двухфакторной аутентификации и введите его для подтверждения:"
|
||||
"description": "Введите код двухфакторной аутентификации, полученный от **{mfa_module_name}**:"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
@ -848,7 +848,7 @@
|
||||
"data": {
|
||||
"code": "Код двухфакторной аутентификации"
|
||||
},
|
||||
"description": "Откройте **{mfa_module_name}** на вашем устройстве для просмотра кода двухфакторной аутентификации и введите его для подтверждения:"
|
||||
"description": "Введите код двухфакторной аутентификации, полученный от **{mfa_module_name}**:"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
|
@ -266,6 +266,11 @@
|
||||
"paused": "Pozastavený",
|
||||
"returning": "Vracia sa do doku"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktívny",
|
||||
"idle": "nečinný",
|
||||
"paused": "pozastavený"
|
||||
},
|
||||
"person": {
|
||||
"home": "Doma",
|
||||
"not_home": "Preč"
|
||||
@ -350,6 +355,21 @@
|
||||
"introduction": "Ovládajte Váš Home Assistant server... z aplikácie Home Assistant.",
|
||||
"restart": "Reštartovať",
|
||||
"stop": "Zastaviť"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "Editor je zablokovaný, pretože konfigurácia je uložená v configuration.yaml",
|
||||
"location_name": "Názov vašej Home Assistant inštalácie",
|
||||
"latitude": "zemepisná šírka",
|
||||
"longitude": "zemepisná dĺžka",
|
||||
"elevation": "Nadmorská výška",
|
||||
"elevation_meters": "metrov",
|
||||
"time_zone": "Časové pásmo",
|
||||
"unit_system": "Jednotková sústava",
|
||||
"unit_system_imperial": "Imperiálny",
|
||||
"unit_system_metric": "metrický",
|
||||
"imperial_example": "Fahrenheita, libry",
|
||||
"metric_example": "Celsia, kilogramy",
|
||||
"save_button": "Uložiť"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -358,7 +378,8 @@
|
||||
"caption": "Prispôsobenie",
|
||||
"description": "Prispôsobte svoje entity",
|
||||
"picker": {
|
||||
"header": "Prispôsobenie"
|
||||
"header": "Prispôsobenie",
|
||||
"introduction": "Upravujte atribúty v rámci entity. Pridané \/ upravené prispôsobenia sa prejavia okamžite. Odstránené prispôsobenia sa prejavia po aktualizácii entity."
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
@ -454,6 +475,7 @@
|
||||
"source": "Zdroj",
|
||||
"zone": "Zóna",
|
||||
"event": "Udalosť:",
|
||||
"enter": "Potvrdiť",
|
||||
"leave": "Opustiť"
|
||||
}
|
||||
},
|
||||
@ -538,7 +560,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "Získajte viac informácií o akciách"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "Len automatizácie v automations.yaml je možné upravovať.",
|
||||
"load_error_unknown": "Chyba pri načítaní automatizácie ( {err_no} )."
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -574,7 +598,8 @@
|
||||
"cloud": {
|
||||
"caption": "Home Assistant Cloud",
|
||||
"description_login": "Prihlásený ako {email}",
|
||||
"description_not_login": "Neprihlásený"
|
||||
"description_not_login": "Neprihlásený",
|
||||
"description_features": "Ovládanie mimo domova, integrácia s Alexa a Google Assistant."
|
||||
},
|
||||
"integrations": {
|
||||
"caption": "Integrácie",
|
||||
@ -590,21 +615,35 @@
|
||||
"delete_confirm": "Naozaj chcete odstrániť túto integráciu?",
|
||||
"restart_confirm": "Ak chcete dokončiť odstránenie tejto integrácie, reštartujte Home Assistant",
|
||||
"manuf": "od {manufacturer}",
|
||||
"hub": "Pripojené cez",
|
||||
"via": "Pripojené cez",
|
||||
"firmware": "Firmvér: {version}",
|
||||
"device_unavailable": "zariadenie nie je k dispozícii",
|
||||
"entity_unavailable": "entita nie je k dispozícii",
|
||||
"no_area": "Žiadna oblasť"
|
||||
},
|
||||
"config_flow": {
|
||||
"external_step": {
|
||||
"description": "Tento krok vyžaduje, aby ste navštívili externú webovú stránku, ktorá dokončí proces.",
|
||||
"open_site": "Otvoriť webovú stránku"
|
||||
}
|
||||
}
|
||||
},
|
||||
"zha": {
|
||||
"caption": "ZHA",
|
||||
"description": "Správa siete ZigBee Home Automation",
|
||||
"services": {
|
||||
"updateDeviceName": "Nastavte vlastný názov pre toto zariadenie v registri zariadenia."
|
||||
"reconfigure": "Znovu nakonfigurujte zariadenie ZHA (oprava zariadenia). Použite, len ak máte problémy so zariadením. Ak sa jedná o zariadenie s batériovým napájaním, uistite sa, že pri používaní tejto služby, nebolo zariadenie v režime spánku a prijímalo príkazy.",
|
||||
"updateDeviceName": "Nastavte vlastný názov pre toto zariadenie v registri zariadenia.",
|
||||
"remove": "Odstráňte zariadenie zo siete ZigBee."
|
||||
},
|
||||
"device_card": {
|
||||
"area_picker_label": "Oblasť"
|
||||
"area_picker_label": "Oblasť",
|
||||
"update_name_button": "Aktualizovať názov"
|
||||
},
|
||||
"add_device_page": {
|
||||
"header": "Zigbee Home Automation - Pridať zariadenia",
|
||||
"spinner": "Vyhľadávanie ZHA Zigbee zariadení ...",
|
||||
"discovery_text": "Tu sa zobrazia objavené zariadenia. Postupujte podľa pokynov pre zariadenie (zariadenia) a umiestnite zariadenie (zariadenia) do režimu párovania."
|
||||
}
|
||||
},
|
||||
"area_registry": {
|
||||
@ -612,6 +651,8 @@
|
||||
"description": "Prehľad všetkých oblastí vo vašej domácnosti.",
|
||||
"picker": {
|
||||
"header": "Register oblastí",
|
||||
"introduction": "Oblasti sa používajú na usporiadanie zariadení. Tieto informácie sa použijú v službe Home Assistant, aby vám pomohli pri organizovaní rozhrania, povolení a integrácií s inými systémami.",
|
||||
"introduction2": "Ak chcete umiestniť zariadenia do oblasti, pomocou odkazu nižšie prejdite na stránku integrácií a potom kliknite na nakonfigurovanú integráciu a prejdite na karty zariadení.",
|
||||
"integrations_page": "Stránka Integrácie",
|
||||
"no_areas": "Vyzerá to, že ešte nemáte žiadne oblasti!",
|
||||
"create_area": "VYTVORIŤ OBLASŤ"
|
||||
@ -631,6 +672,8 @@
|
||||
"picker": {
|
||||
"header": "Register entít",
|
||||
"unavailable": "(nedostupné)",
|
||||
"introduction": "Home Assistant vedie register všetkých subjektov, ktoré kedy videl a ktoré môžu byť jednoznačne identifikované. Každá z týchto entít bude mať pridelené ID, ktoré bude vyhradené len pre tento subjekt.",
|
||||
"introduction2": "Použite register entít na prepísanie mena, zmenu ID entity alebo odstránenie položky z Home Assistanta. Poznámka: Odstránenie položky databázy entít neodstráni entitu. Postupujte podľa nižšie uvedeného odkazu a odstráňte ho z integračnej stránky.",
|
||||
"integrations_page": "Stránka Integrácie"
|
||||
},
|
||||
"editor": {
|
||||
@ -803,7 +846,8 @@
|
||||
"mfa": {
|
||||
"data": {
|
||||
"code": "2-faktorový autentifikačný kód"
|
||||
}
|
||||
},
|
||||
"description": "Otvorte **{mfa_module_name}** na vašom zariadení a pozrite si váš dvoj-faktorový autentifikačný kód, aby ste overili svoju identitu."
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
@ -833,6 +877,19 @@
|
||||
"required_fields": "Vyplňte všetky povinné polia",
|
||||
"password_not_match": "Heslá sa nezhodujú"
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"intro": "Zariadenia a služby sú v systéme Home Assistant zobrazené ako integrácie. Môžete ich nastaviť teraz alebo to urobiť neskôr z konfiguračnej obrazovky.",
|
||||
"more_integrations": "Viac",
|
||||
"finish": "Dokončiť"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "Dobrý deň, {name} , vitajte v Home Assistantovi. Ako by ste chceli pomenovať svoj domov?",
|
||||
"intro_location": "Radi by sme vedeli, kde žijete. Tieto informácie vám pomôžu pri zobrazovaní informácií a nastavovaní automatizácie na základe slnka. Tieto údaje sa nikdy nezdieľajú mimo vašej siete.",
|
||||
"intro_location_detect": "Môžeme vám pomôcť vyplniť tieto informácie jednorazovou žiadosťou o externú službu.",
|
||||
"location_name_default": "Domov",
|
||||
"button_detect": "Zistiť",
|
||||
"finish": "Ďalej"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -844,7 +901,16 @@
|
||||
},
|
||||
"empty_state": {
|
||||
"title": "Vitajte doma",
|
||||
"no_devices": "Táto stránka vám umožňuje ovládať vaše zariadenia, zdá sa však, že ešte nemáte nastavené žiadne zariadenia. Ak chcete začať, choďte na stránku integrácií.",
|
||||
"go_to_integrations_page": "Prejsť na stránku integrácií"
|
||||
},
|
||||
"picture-elements": {
|
||||
"hold": "Držať:",
|
||||
"tap": "Ťuknite:",
|
||||
"navigate_to": "Navigovať do {Location}",
|
||||
"toggle": "Prepnúť {name}",
|
||||
"call_service": "Zavolať službu",
|
||||
"more_info": "Zobraziť viac informácií: {name}"
|
||||
}
|
||||
},
|
||||
"editor": {
|
||||
@ -897,12 +963,18 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Entita nie je k dispozícií",
|
||||
"entity_non_numeric": "Entita je nečíselná: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "Konfigurácia Lovelace bola aktualizovaná, chcete ju obnoviť?",
|
||||
"refresh": "Obnoviť"
|
||||
},
|
||||
"reload_lovelace": "Znovu načítať Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
"log_out": "Odhlásiť sa",
|
||||
"developer_tools": "Vývojárske nástroje"
|
||||
"developer_tools": "Vývojárske nástroje",
|
||||
"external_app_configuration": "Konfigurácia aplikácie"
|
||||
},
|
||||
"common": {
|
||||
"loading": "Načítava sa",
|
||||
@ -1133,6 +1205,7 @@
|
||||
"hassio": "Hass.io",
|
||||
"homeassistant": "Home Assistant",
|
||||
"lovelace": "Lovelace",
|
||||
"system_health": "Stav systému",
|
||||
"person": "Osoba"
|
||||
},
|
||||
"attribute": {
|
||||
@ -1142,8 +1215,18 @@
|
||||
"wind_speed": "Rýchlosť vetra"
|
||||
}
|
||||
},
|
||||
"state_attributes": {
|
||||
"climate": {
|
||||
"fan_mode": {
|
||||
"off": "Vypnutý",
|
||||
"on": "Zapnutý",
|
||||
"auto": "Auto"
|
||||
}
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"system-admin": "Správcovia",
|
||||
"system-users": "Používatelia"
|
||||
"system-users": "Používatelia",
|
||||
"system-read-only": "Používatelia len na čítanie"
|
||||
}
|
||||
}
|
@ -281,7 +281,7 @@
|
||||
"unknown": "Neznano",
|
||||
"unavailable": "N\/A",
|
||||
"error": "Napaka",
|
||||
"entity_not_found": "Subjekt ni bil najden"
|
||||
"entity_not_found": "Entiteta ni bila najdena"
|
||||
},
|
||||
"alarm_control_panel": {
|
||||
"armed": "Aktiven",
|
||||
@ -338,7 +338,7 @@
|
||||
"validation": {
|
||||
"heading": "Preverjanje konfiguracije",
|
||||
"introduction": "Potrdite svojo konfiguracijo, če ste nedavno spremenili svojo konfiguracijo in se prepričajte, da je vse veljavno",
|
||||
"check_config": "Preverite nastavitve",
|
||||
"check_config": "Preverite konfiguracijo",
|
||||
"valid": "Konfiguracija veljavna!",
|
||||
"invalid": "Konfiguracija ni veljavna"
|
||||
},
|
||||
@ -379,7 +379,7 @@
|
||||
"description": "Prilagodite svoje entitete",
|
||||
"picker": {
|
||||
"header": "Prilagajanje",
|
||||
"introduction": "Prilagajanja atributov na subjektu. Dodane\/spremenjene prilagoditve začnejo veljati takoj. Odstranjene pa po posodobitvi subjekta."
|
||||
"introduction": "Prilagajanja atributov na entiteti. Dodane\/spremenjene prilagoditve začnejo veljati takoj. Odstranjene pa po posodobitvi entitete."
|
||||
}
|
||||
},
|
||||
"automation": {
|
||||
@ -454,7 +454,7 @@
|
||||
},
|
||||
"zone": {
|
||||
"label": "Območje",
|
||||
"entity": "Subjekt z lokacijo",
|
||||
"entity": "Entitete z lokacijo",
|
||||
"zone": "Območje",
|
||||
"event": "Dogodek:",
|
||||
"enter": "Vnesite",
|
||||
@ -521,7 +521,7 @@
|
||||
},
|
||||
"zone": {
|
||||
"label": "Območje",
|
||||
"entity": "Subjekt z lokacijo",
|
||||
"entity": "Entitete z lokacijo",
|
||||
"zone": "Območje"
|
||||
}
|
||||
},
|
||||
@ -611,14 +611,14 @@
|
||||
"none": "Nič še ni konfigurirano",
|
||||
"config_entry": {
|
||||
"no_devices": "Ta integracija je brez naprav.",
|
||||
"no_device": "Subjekti brez naprav",
|
||||
"no_device": "Entitete brez naprav",
|
||||
"delete_confirm": "Ali ste prepričani, da želite izbrisati to integracijo?",
|
||||
"restart_confirm": "Znova zaženite Home Assistant-a, da dokončate odstranitev te integracije",
|
||||
"manuf": "po {manufacturer}",
|
||||
"hub": "Povezan prek",
|
||||
"via": "Povezan prek",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "naprava ni na voljo",
|
||||
"entity_unavailable": "subjekt ni na voljo",
|
||||
"entity_unavailable": "entiteta ni na voljo",
|
||||
"no_area": "Brez območja"
|
||||
},
|
||||
"config_flow": {
|
||||
@ -668,10 +668,10 @@
|
||||
}
|
||||
},
|
||||
"entity_registry": {
|
||||
"caption": "Register subjekta",
|
||||
"description": "Pregled vseh znanih subjektov.",
|
||||
"caption": "Seznam entitet",
|
||||
"description": "Pregled vseh znanih entitet.",
|
||||
"picker": {
|
||||
"header": "Register subjekta",
|
||||
"header": "Seznam entitet",
|
||||
"unavailable": "(ni na voljo)",
|
||||
"introduction": "Home Assistant vodi register vseh entitet, ki jih je kdajkoli videl in jih je mogoče enolično identificirati. Vsak od teh entitet ima dodeljen ID entitete, ki bo rezerviran samo za to entiteto.",
|
||||
"introduction2": "Z registrom entitet preglasite ime, spremenite ID entitete ali odstranite vnos iz Home Assistent-a. Opomba, odstranitev vnosa registra entitet ne bo odstranila entitete. Če želite to narediti, sledite spodnji povezavi in jo odstranite s strani za integracijo.",
|
||||
@ -949,7 +949,7 @@
|
||||
"raw_editor": "Urejevalnik konfiguracije"
|
||||
},
|
||||
"raw_editor": {
|
||||
"header": "Uredi Nastavitve",
|
||||
"header": "Uredi nastavitve",
|
||||
"save": "Shrani",
|
||||
"unsaved_changes": "Neshranjene spremembe",
|
||||
"saved": "Shranjeno"
|
||||
@ -957,14 +957,19 @@
|
||||
},
|
||||
"menu": {
|
||||
"configure_ui": "Konfiguriraj UI",
|
||||
"unused_entities": "Neuporabljeni subjekti",
|
||||
"unused_entities": "Neuporabljene entitete",
|
||||
"help": "Pomoč",
|
||||
"refresh": "Osveži"
|
||||
},
|
||||
"warning": {
|
||||
"entity_not_found": "Subjekt ni na voljo: {entity}",
|
||||
"entity_non_numeric": "Subjekt je neštevilski: {entity}"
|
||||
}
|
||||
"entity_not_found": "Entiteta ni na voljo: {entity}",
|
||||
"entity_non_numeric": "Entiteta je neštevilska: {entity}"
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "Konfiguracija Lovelace je bila spremenjena, jo želiš osvežiti?",
|
||||
"refresh": "Osveži"
|
||||
},
|
||||
"reload_lovelace": "Ponovno naloži Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
@ -1100,7 +1105,7 @@
|
||||
"components": {
|
||||
"entity": {
|
||||
"entity-picker": {
|
||||
"entity": "Subjekt"
|
||||
"entity": "Entiteta"
|
||||
}
|
||||
},
|
||||
"service-picker": {
|
||||
@ -1134,7 +1139,7 @@
|
||||
"more_info_settings": {
|
||||
"save": "Shrani",
|
||||
"name": "Preglasitev imena",
|
||||
"entity_id": "ID subjekta"
|
||||
"entity_id": "ID entitete"
|
||||
},
|
||||
"more_info_control": {
|
||||
"script": {
|
||||
|
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "Är du säker på att du vill radera denna integration?",
|
||||
"restart_confirm": "Starta om Home Assistant för att slutföra borttagningen av denna integration",
|
||||
"manuf": "av {manufacturer}",
|
||||
"hub": "Ansluten via",
|
||||
"via": "Ansluten via",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "enhet otillgänglig",
|
||||
"entity_unavailable": "entitet otillgänglig",
|
||||
|
@ -355,6 +355,21 @@
|
||||
"introduction": "สำหรับควบคุมเซิร์ฟเวอร์ Home Assistant อีกทีนึงจาก Home Assistant อีกที",
|
||||
"restart": "เริ่มต้นใหม่",
|
||||
"stop": "หยุด"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "ตัวช่วยแก้ไขถูกปิดใช้งาน เนื่องจากการกำหนดค่าถูกกำหนดไว้ในไฟล์ configuration.yaml",
|
||||
"location_name": "ชื่อในการติดตั้ง Home Assistant ของคุณ",
|
||||
"latitude": "ละติจูด",
|
||||
"longitude": "ลองจิจูด",
|
||||
"elevation": "มุมเงย",
|
||||
"elevation_meters": "เมตร",
|
||||
"time_zone": "เขตเวลา",
|
||||
"unit_system": "ระบบหน่วย",
|
||||
"unit_system_imperial": "ของจักรพรรดิ",
|
||||
"unit_system_metric": "เมตริก",
|
||||
"imperial_example": "ฟาเรนไฮต์, ปอนด์",
|
||||
"metric_example": "เซลเซียส, กิโลกรัม",
|
||||
"save_button": "บันทึก"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -545,7 +560,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "เรียนรู้เพิ่มเติมเกี่ยวกับ Action"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "ระบบอัตโนมัติที่อยู่ในไฟล์ Automations.yaml เท่านั้นที่สามารถแก้ไขได้",
|
||||
"load_error_unknown": "เกิดข้อผิดพลาดในการโหลดระบบอัตโนมัติ ({err_no})"
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -598,7 +615,7 @@
|
||||
"delete_confirm": "แน่ใจหรือว่าต้องการจะลบการบูรณาการนี้",
|
||||
"restart_confirm": "เริ่ม Home Assistant ใหม่หลังจากลบการบูรณาการนี้",
|
||||
"manuf": "โดย {manufacturer}",
|
||||
"hub": "เชื่อมต่อแล้ว",
|
||||
"via": "เชื่อมต่อแล้ว",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "อุปกรณ์นี้ไม่พร้อมใช้งาน",
|
||||
"entity_unavailable": "Entity นี้ไม่พร้อมใช้งาน",
|
||||
@ -863,8 +880,17 @@
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"intro": "อุปกรณ์และบริการแสดงอยู่ใน Home Assistant เป็นการผสานรวม คุณสามารถตั้งค่าตอนนี้หรือทำภายหลังจากหน้าจอการตั้งค่า",
|
||||
"more_integrations": "เพิ่มเติม",
|
||||
"finish": "เสร็จสิ้น"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "สวัสดี {name} ยินดีต้อนรับสู่ Home Assistant คุณต้องการตั้งชื่อบ้านของคุณยังไงดีละ",
|
||||
"intro_location": "เราต้องการทราบว่าคุณอาศัยอยู่ที่ไหน ข้อมูลนี้จะช่วยในการแสดงข้อมูลต่างๆ และตั้งค่าการทำงานอัตโนมัติตามดวงอาทิตย์ ข้อมูลนี้จะไม่เปิดเผยไปยังนอกเครือข่ายของคุณ",
|
||||
"intro_location_detect": "เราสามารถช่วยคุณกรอกข้อมูลนี้ได้โดยทำการร้องขอแบบครั้งเดียวไปยังบริการภายนอก",
|
||||
"location_name_default": "อยู่บ้าน",
|
||||
"button_detect": "ตรวจจับ",
|
||||
"finish": "ต่อไป"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -938,7 +964,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "Entity ไม่พร้อมใช้งาน: {entity}",
|
||||
"entity_non_numeric": "Entity ที่ไม่ใช่ตัวเลข: {entity}"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "อัพเดทการกำหนดค่าส่วนแสดงผล Lovelace แล้ว คุณต้องการจะรีเฟรชหน้าหรือไม่",
|
||||
"refresh": "รีเฟรช"
|
||||
},
|
||||
"reload_lovelace": "โหลดส่วนแสดงผล Lovelace ใหม่"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
|
@ -478,7 +478,7 @@
|
||||
"delete_confirm": "Bu entegrasyonu silmek istediğinizden emin misiniz?",
|
||||
"restart_confirm": "Bu entegrasyonu kaldırmaya devam etmek için Home Assistant'ı yeniden başlatın",
|
||||
"manuf": "üretici: {manufacturer}",
|
||||
"hub": "Şununla bağlı:",
|
||||
"via": "Şununla bağlı:",
|
||||
"firmware": "Aygıt yazılımı: {version}",
|
||||
"device_unavailable": "aygıt kullanılamıyor",
|
||||
"entity_unavailable": "varlık kullanılamıyor"
|
||||
|
@ -588,7 +588,7 @@
|
||||
"delete_confirm": "Ви впевнені, що хочете видалити цю інтеграцію?",
|
||||
"restart_confirm": "Перезавантажте Home Assistant, щоб завершити видалення цієї інтеграції",
|
||||
"manuf": "від {manufacturer}",
|
||||
"hub": "Підключено через",
|
||||
"via": "Підключено через",
|
||||
"firmware": "Прошивка: {version}",
|
||||
"device_unavailable": "пристрій недоступний",
|
||||
"entity_unavailable": "Недоступний",
|
||||
|
@ -594,7 +594,7 @@
|
||||
"delete_confirm": "Bạn chắc chắn muốn xóa bộ tích hợp này?",
|
||||
"restart_confirm": "Khởi động lại Home Assistant để hoàn tất xóa bộ tích hợp này",
|
||||
"manuf": "bởi {manufacturer}",
|
||||
"hub": "Đã kết nối qua",
|
||||
"via": "Đã kết nối qua",
|
||||
"firmware": "Firmware: {version}",
|
||||
"device_unavailable": "Thiết bị không khả dụng",
|
||||
"entity_unavailable": "Thiết bị không khả dụng",
|
||||
|
@ -355,6 +355,21 @@
|
||||
"introduction": "在这里即可控制 Home Assistant 服务。",
|
||||
"restart": "重启服务",
|
||||
"stop": "停止服务"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "编辑器已禁用,因为配置存储于 configuration.yaml。",
|
||||
"location_name": "Home Assistant 安装的名称",
|
||||
"latitude": "纬度",
|
||||
"longitude": "经度",
|
||||
"elevation": "海拔",
|
||||
"elevation_meters": "米",
|
||||
"time_zone": "时区",
|
||||
"unit_system": "单位制",
|
||||
"unit_system_imperial": "英制",
|
||||
"unit_system_metric": "公制",
|
||||
"imperial_example": "华氏、磅",
|
||||
"metric_example": "摄氏、千克",
|
||||
"save_button": "保存"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -545,7 +560,9 @@
|
||||
}
|
||||
},
|
||||
"learn_more": "详细了解动作"
|
||||
}
|
||||
},
|
||||
"load_error_not_editable": "只能编辑 automations.yaml 中的自动化。",
|
||||
"load_error_unknown": "加载自动化错误 ( {err_no})。"
|
||||
}
|
||||
},
|
||||
"script": {
|
||||
@ -598,7 +615,7 @@
|
||||
"delete_confirm": "您确定要删除此集成吗?",
|
||||
"restart_confirm": "重启 Home Assistant 以完成此集成的删除",
|
||||
"manuf": "by {manufacturer}",
|
||||
"hub": "链接于",
|
||||
"via": "链接于",
|
||||
"firmware": "固件:{version}",
|
||||
"device_unavailable": "设备不可用",
|
||||
"entity_unavailable": "实体不可用",
|
||||
@ -866,6 +883,14 @@
|
||||
"intro": "设备和服务在 Home Assistant 中表示为集成。您可以立即设置它们,也可以稍后在配置屏幕进行设置。",
|
||||
"more_integrations": "更多",
|
||||
"finish": "完成"
|
||||
},
|
||||
"core-config": {
|
||||
"intro": "{name},您好!欢迎来到 Home Assistant。您想怎样命名您的家呢?",
|
||||
"intro_location": "我们想知道您住在哪里。这将用于显示资讯以及设置基于太阳的自动化。此数据永远不会在您的网络以外共享。",
|
||||
"intro_location_detect": "我们可以通过向外部服务发出一个一次性请求来帮助您填写此信息。",
|
||||
"location_name_default": "Home",
|
||||
"button_detect": "自动检测",
|
||||
"finish": "下一步"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
@ -939,7 +964,12 @@
|
||||
"warning": {
|
||||
"entity_not_found": "实体 {entity} 不可用",
|
||||
"entity_non_numeric": "实体 {entity} 非数值"
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "Lovelace 配置已更新,您想刷新吗?",
|
||||
"refresh": "刷新"
|
||||
},
|
||||
"reload_lovelace": "重新加载 Lovelace"
|
||||
}
|
||||
},
|
||||
"sidebar": {
|
||||
|
@ -357,14 +357,14 @@
|
||||
"stop": "停止"
|
||||
},
|
||||
"core_config": {
|
||||
"edit_requires_storage": "由於設定儲存於 configuration.yaml 內,編輯功能已關閉。",
|
||||
"edit_requires_storage": "由於 configuration.yaml 內已儲存設定,編輯功能已關閉。",
|
||||
"location_name": "Home Assistant 安裝名稱",
|
||||
"latitude": "緯度",
|
||||
"longitude": "經度",
|
||||
"elevation": "海拔",
|
||||
"elevation_meters": "公尺",
|
||||
"time_zone": "時區",
|
||||
"unit_system": "單位制",
|
||||
"unit_system": "單位系統",
|
||||
"unit_system_imperial": "英制",
|
||||
"unit_system_metric": "公制",
|
||||
"imperial_example": "華氏、磅",
|
||||
@ -615,7 +615,7 @@
|
||||
"delete_confirm": "確定要刪除此整合?",
|
||||
"restart_confirm": "重啟 Home Assistant 以完成此整合移動",
|
||||
"manuf": "廠牌:{manufacturer}",
|
||||
"hub": "連線:",
|
||||
"via": "連線:",
|
||||
"firmware": "韌體:{version}",
|
||||
"device_unavailable": "裝置不可用",
|
||||
"entity_unavailable": "物件不可用",
|
||||
|
138
yarn.lock
138
yarn.lock
@ -741,15 +741,15 @@
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@material/button@^1.0.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/button/-/button-1.1.0.tgz#dbb46c953040d3a161346e1d3cd057159b9a3c34"
|
||||
integrity sha512-P1oZyyC1ELRe26vdnmax+fO3BWNmftDqHDDlQbJ+gfYMDQsNQtZNJU16ZbnVHsnzEXOpFj729imbmuLfnz8Nbg==
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@material/button/-/button-1.1.1.tgz#35af0d295f6ce6e3df9d4978485b5294d794f682"
|
||||
integrity sha512-03aEyzZBIeqpgZkqLjro/enz8ORUnfQslBUdAgkPqdjh1X0oIEugr3UaFyC5QlSBTU3j3GIsnKIxWaggkRenpQ==
|
||||
dependencies:
|
||||
"@material/elevation" "^1.1.0"
|
||||
"@material/feature-targeting" "^0.44.1"
|
||||
"@material/ripple" "^1.1.0"
|
||||
"@material/rtl" "^0.42.0"
|
||||
"@material/shape" "^1.0.0"
|
||||
"@material/shape" "^1.1.1"
|
||||
"@material/theme" "^1.1.0"
|
||||
"@material/typography" "^1.0.0"
|
||||
|
||||
@ -774,38 +774,38 @@
|
||||
resolved "https://registry.yarnpkg.com/@material/feature-targeting/-/feature-targeting-0.44.1.tgz#afafc80294e5efab94bee31a187273d43d34979a"
|
||||
integrity sha512-90cc7njn4aHbH9UxY8qgZth1W5JgOgcEdWdubH1t7sFkwqFxS5g3zgxSBt46TygFBVIXNZNq35Xmg80wgqO7Pg==
|
||||
|
||||
"@material/mwc-base@^0.5.0":
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-base/-/mwc-base-0.5.0.tgz#21f9f237acea444b07a0fb1dfd45d30ef8f62374"
|
||||
integrity sha512-G0n5LCmeXs9QR/ptHgUmV043wUVN2Uq1CWxUeGisGEPCI5e/mt9ISk5/7MubO25yF9muQeQXxXdRt/kFc7xGCg==
|
||||
"@material/mwc-base@^0.6.0":
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-base/-/mwc-base-0.6.0.tgz#2077b5f94c3d8fa2a65736b02c3d380314ea1154"
|
||||
integrity sha512-AiMEoU3dkLhuEnK5HJ0yMrdcyq5rUq9LdooxOSLMzPRr/ALT8YS14/oklufYiPagehzJcL0MeiyL40OlSpkyBA==
|
||||
dependencies:
|
||||
"@material/base" "^1.0.0"
|
||||
lit-element "^2.0.1"
|
||||
lit-html "^1.0.0"
|
||||
|
||||
"@material/mwc-button@^0.5.0":
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-button/-/mwc-button-0.5.0.tgz#3456bfd9ef7d91d96c623952cca974216bf47f3e"
|
||||
integrity sha512-XFzMuEGCtiT80fw5B6TibyAq3LPTUKXlbvgGg8kRSFsWJUXLfZKzCp/J3oJRGxZeSut33HiYXoQ1FAq9cygXeA==
|
||||
"@material/mwc-button@^0.6.0":
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-button/-/mwc-button-0.6.0.tgz#5264623ab7bfc80cc0a118ae9188a2c69b4a8e8c"
|
||||
integrity sha512-oZTXXtg5z7tqvbFN5gMWsya/OU1ThEQ8ZZ/KN4PzDHGoYcjGLWWYTyDtarfP2VfJn+pRL0Ql5+l3i8j1i4Vr8Q==
|
||||
dependencies:
|
||||
"@material/button" "^1.0.0"
|
||||
"@material/mwc-base" "^0.5.0"
|
||||
"@material/mwc-icon" "^0.5.0"
|
||||
"@material/mwc-ripple" "^0.5.0"
|
||||
"@material/mwc-base" "^0.6.0"
|
||||
"@material/mwc-icon" "^0.6.0"
|
||||
"@material/mwc-ripple" "^0.6.0"
|
||||
|
||||
"@material/mwc-icon@^0.5.0":
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-icon/-/mwc-icon-0.5.0.tgz#432a1c5b7d817f1d04341b3c4bb8ef514cbd8cb6"
|
||||
integrity sha512-vDzNc3sYPm9I5cG//TiYM5BTt3zW283zC8F5mx2rmtK3E7/UXRZmT6b94rv9em7mEUv86DedYPzCzND8oXctxA==
|
||||
"@material/mwc-icon@^0.6.0":
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-icon/-/mwc-icon-0.6.0.tgz#67a71d95aa9a6d2379c5896673c2d0f1f2666e4e"
|
||||
integrity sha512-Pm4nalbSfsgMz0K8dRaE2tBsyiCozrlgh9iEtBvRdYV6IzPJacXjqsf8+2faW3lfmh4PRLQzVJ7Fldm+ljxzBA==
|
||||
dependencies:
|
||||
"@material/mwc-base" "^0.5.0"
|
||||
"@material/mwc-base" "^0.6.0"
|
||||
|
||||
"@material/mwc-ripple@^0.5.0":
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-ripple/-/mwc-ripple-0.5.0.tgz#6520971df2ff067ef52121c3cc0c4d8960d61977"
|
||||
integrity sha512-vOB9ZpbBKnNsE+d4GoZIUoupk2am5kHBHqGkwSXXTt4c01SO0HRWkdNxayB2QAHgN56Xnsct0z0/pdfoZz7lKA==
|
||||
"@material/mwc-ripple@^0.6.0":
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/mwc-ripple/-/mwc-ripple-0.6.0.tgz#602eb1855acd7e02d79398290ff223f9335976e3"
|
||||
integrity sha512-K0b3VtKTlUd2RLaSJd6y9lBX47A84QjsK4eMn3PhDlWG7CkfhRf5XBZrOf/wzrqNf2/0w5of+8rFkohTraLHiw==
|
||||
dependencies:
|
||||
"@material/mwc-base" "^0.5.0"
|
||||
"@material/mwc-base" "^0.6.0"
|
||||
"@material/ripple" "^1.0.0"
|
||||
lit-html "^1.0.0"
|
||||
|
||||
@ -826,10 +826,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@material/rtl/-/rtl-0.42.0.tgz#1836e78186c2d8b996f6fbf97adab203535335bc"
|
||||
integrity sha512-VrnrKJzhmspsN8WXHuxxBZ69yM5IwhCUqWr1t1eNfw3ZEvEj7i1g3P31HGowKThIN1dc1Wh4LE14rCISWCtv5w==
|
||||
|
||||
"@material/shape@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@material/shape/-/shape-1.0.0.tgz#bef17de1f282e5c71138338a34078d8402308f65"
|
||||
integrity sha512-zfXEacPQZmH+ujVtaFyfAsYiF46j1QCcFzJeZVouG4pznrbA7XD6614Ywg0wbyWX5iB6hD52ld/IN+R/6oxKqA==
|
||||
"@material/shape@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@material/shape/-/shape-1.1.1.tgz#7a5368694bc3555e69ea547950904b46fa1024bf"
|
||||
integrity sha512-Jge/h1XBLjdLlam4QMSzVgM99e/N8+elQROPkltqVP7eyLc17BwM3aP5cLVfZDgrJgvsjUxbgAP1H1j8sqmUyg==
|
||||
dependencies:
|
||||
"@material/feature-targeting" "^0.44.1"
|
||||
|
||||
@ -1051,9 +1051,9 @@
|
||||
"@polymer/polymer" "^3.0.0"
|
||||
|
||||
"@polymer/iron-image@^3.0.0-pre.26", "@polymer/iron-image@^3.0.1":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/iron-image/-/iron-image-3.0.1.tgz#c5456d65733879ab0aaed75fbc26419db79cbe5d"
|
||||
integrity sha512-Tp6iB/7YYo6IwmVnxHgctKJXjlE6KcHtja+BvyKq7Du+9JB8XgZ2D+WZTYofagwQJ5Akl4oFis5gtO+LM9Z4dA==
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/iron-image/-/iron-image-3.0.2.tgz#425ee6269634e024dbea726a91a61724ae4402b6"
|
||||
integrity sha512-VyYtnewGozDb5sUeoLR1OvKzlt5WAL6b8Od7fPpio5oYL+9t061/nTV8+ZMrpMgF2WgB0zqM/3K53o3pbK5v8Q==
|
||||
dependencies:
|
||||
"@polymer/polymer" "^3.0.0"
|
||||
|
||||
@ -1240,9 +1240,9 @@
|
||||
"@polymer/polymer" "^3.0.0"
|
||||
|
||||
"@polymer/paper-drawer-panel@^3.0.1":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/paper-drawer-panel/-/paper-drawer-panel-3.0.1.tgz#e50756f3402919c8e3a1bd4d8e28a4009ee8fcc9"
|
||||
integrity sha512-4WthuicPKOwtfxoYCfHiGTkM/W61p15A4rGbxI6VltY2ostQEqXXsQvdGHguHsxkjdasOc2mstBhP0ZOrCdGgg==
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/paper-drawer-panel/-/paper-drawer-panel-3.0.2.tgz#a4e40294e7a4879030df895a22c906a0415fdaaa"
|
||||
integrity sha512-3hoGbPGh6OXkDnC33kXDMHFW9+pV7CXb3wFFvvu+JPkFGGRq6Es464qHOdiBHL+H76sQ/+NcgpvTMUO4a/k3XA==
|
||||
dependencies:
|
||||
"@polymer/iron-media-query" "^3.0.0-pre.26"
|
||||
"@polymer/iron-resizable-behavior" "^3.0.0-pre.26"
|
||||
@ -1288,9 +1288,9 @@
|
||||
"@polymer/polymer" "^3.0.0"
|
||||
|
||||
"@polymer/paper-input@^3.0.0-pre.26", "@polymer/paper-input@^3.0.1":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/paper-input/-/paper-input-3.0.1.tgz#ec711a131af74f10553bbf1125971ddc354afe62"
|
||||
integrity sha512-th6fuP6PyQEBJSWVtJQ/ZsoQp8Zysq4bRIOg2uGZsNX6gfm6AVoMph5pXOlS8RHoVDDYDG9GRjQib7JPSWKkrw==
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/paper-input/-/paper-input-3.0.2.tgz#c70559ed9b38a34efda972de8bcb7caed3c299d5"
|
||||
integrity sha512-EoyJLsUCo7zLQp63jG7+qbRcN7ynT0p9MktDeH+dnl29UqFD4Ovj2/O5cSgq3lA3dYrei4vHF11Qmdmk7iab7Q==
|
||||
dependencies:
|
||||
"@polymer/iron-a11y-keys-behavior" "^3.0.0-pre.26"
|
||||
"@polymer/iron-autogrow-textarea" "^3.0.0-pre.26"
|
||||
@ -1413,9 +1413,9 @@
|
||||
"@polymer/polymer" "^3.0.0"
|
||||
|
||||
"@polymer/paper-tabs@^3.0.1":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/paper-tabs/-/paper-tabs-3.0.1.tgz#525bfdfeff00af37d16c7ca70779fad72f74a086"
|
||||
integrity sha512-gXCMUp17ND1rfhKzA3HPxA7CiHa00FG6cj2upovzPnm3/0rZ/apHGOFH8nyNcBU0JyrxTgKi8qVDp7eZqASr9g==
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@polymer/paper-tabs/-/paper-tabs-3.1.0.tgz#a173839d20703fdd5fca97a9d878f7b0e6257150"
|
||||
integrity sha512-t8G+3CiyI0R+wA077UNQXR/oG9GlsqRRO1KMsFHHjBSsYqWXghNsqxUG827wEj+PafI5u9tZ3vVt1S++Lg4B2g==
|
||||
dependencies:
|
||||
"@polymer/iron-behaviors" "^3.0.0-pre.26"
|
||||
"@polymer/iron-flex-layout" "^3.0.0-pre.26"
|
||||
@ -2374,14 +2374,14 @@
|
||||
"@xtuc/long" "4.2.2"
|
||||
|
||||
"@webcomponents/shadycss@^1.8.0", "@webcomponents/shadycss@^1.9.0":
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@webcomponents/shadycss/-/shadycss-1.9.0.tgz#8450465037370d4f5c32e801bb2554a7cf2f5037"
|
||||
integrity sha512-g8Xa+6RSEME4g/wLJW4YII0eq15rvXp76RxPAuv7hx+Bdoi7GzZJ/EoZOUfyIbqAsQbII1TcWD4/+Xhs5NcM1w==
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/@webcomponents/shadycss/-/shadycss-1.9.1.tgz#d769fbadfa504f11b84caeef26701f89070ec49a"
|
||||
integrity sha512-IaZOnWOKXHghqk/WfPNDRIgDBi3RsVPY2IFAw6tYiL9UBGvQRy5R6uC+Fk7qTZsReTJ0xh5MTT8yAcb3MUR4mQ==
|
||||
|
||||
"@webcomponents/webcomponentsjs@^1.0.7", "@webcomponents/webcomponentsjs@^2.0.0", "@webcomponents/webcomponentsjs@^2.2.7":
|
||||
version "2.2.7"
|
||||
resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.2.7.tgz#1f1a7a7aa083db5ae6aadaeda68caa8fd8657462"
|
||||
integrity sha512-kPPjzV+5kpoWpTniyvBSPcXS33f3j/C6HvNOJ3YecF3pvz3XwVeU4ammbxtVy/osF3z7hr1DYNptIf4oPEvXZA==
|
||||
"@webcomponents/webcomponentsjs@^1.0.7", "@webcomponents/webcomponentsjs@^2.0.0", "@webcomponents/webcomponentsjs@^2.2.10", "@webcomponents/webcomponentsjs@^2.2.7":
|
||||
version "2.2.10"
|
||||
resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.2.10.tgz#6f6bee0277833ae98d7e5b46f1e0fdb48cd5ff44"
|
||||
integrity sha512-5dzhUhP+h0qMiK0IWb7VNb0OGBoXO3AuI6Qi8t9PoKT50s5L1jv0xnwnLq+cFgPuTB8FLTNP8xIDmyoOsKBy9Q==
|
||||
|
||||
"@xtuc/ieee754@^1.2.0":
|
||||
version "1.2.0"
|
||||
@ -7247,10 +7247,10 @@ hoek@6.x.x:
|
||||
resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c"
|
||||
integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==
|
||||
|
||||
home-assistant-js-websocket@^4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-4.2.1.tgz#8acdf2a404b4204669213d8405cca027b8b1de1c"
|
||||
integrity sha512-lF4owDhAAUY70FNvTzgg6MAEOpKbJDLsRDX3gW48muna03s3CRGQzbLmy621pJWK757CkXSW/rWbr34r3Wyi8Q==
|
||||
home-assistant-js-websocket@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-4.2.2.tgz#e13b058a9e200bc56080e1b48fdeaaf1ed2e4e5f"
|
||||
integrity sha512-4mXYbn2DCiDVBYGZROUSWLBDerSoDRJulw1GiQbhKEyrDhzFs5KQkcLdIu6k3CSDYQiiKQez5uAhOfb0Hr/M0A==
|
||||
|
||||
homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
|
||||
version "1.0.3"
|
||||
@ -8515,14 +8515,14 @@ listr@^0.14.2:
|
||||
p-map "^2.0.0"
|
||||
rxjs "^6.3.3"
|
||||
|
||||
lit-element@^2.0.1, lit-element@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.1.0.tgz#85bc3f1da0227f4b13de8a1be978229b9fa327e9"
|
||||
integrity sha512-0z/KHm1xZweivfOVRr8AKR06+D3k02u15m9s4jkuRdnGe5wfmEwePzrQQBsSZNILdnfJvfo3TJOeGhBCVZaPbw==
|
||||
lit-element@^2.0.1, lit-element@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.2.0.tgz#e853be38021f0c7743a10180affdf84b8a02400c"
|
||||
integrity sha512-Mzs3H7IO4wAnpzqreHw6dQqp9IG+h/oN8X9pgNbMZbE7x6B0aNOwP5Nveox/5HE+65ZfW2PeULEjoHkrwpTnuQ==
|
||||
dependencies:
|
||||
lit-html "^1.0.0"
|
||||
|
||||
lit-html@^1.0.0:
|
||||
lit-html@^1.0.0, lit-html@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.1.0.tgz#6951fb717fb48fe34d915ae163448a04da321562"
|
||||
integrity sha512-ZDJHpJi09yknMpjwPI8fuSl5sUG7+pF+eE5WciFtgyX7zebvgMDBgSLq4knXa7grxM00RkQ7PBd7UZQiruA78Q==
|
||||
@ -9127,9 +9127,9 @@ map-visit@^1.0.0:
|
||||
object-visit "^1.0.0"
|
||||
|
||||
marked@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-0.6.1.tgz#a63addde477bca9613028de4b2bc3629e53a0562"
|
||||
integrity sha512-+H0L3ibcWhAZE02SKMqmvYsErLo4EAVJxu5h3bHBBDvvjeWXtl92rGUSBYHL2++5Y+RSNgl8dYOAXcYe7lp1fA==
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-0.6.2.tgz#c574be8b545a8b48641456ca1dbe0e37b6dccc1a"
|
||||
integrity sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==
|
||||
|
||||
matchdep@^2.0.0:
|
||||
version "2.0.0"
|
||||
@ -9172,9 +9172,9 @@ md5@^2.2.1:
|
||||
is-buffer "~1.1.1"
|
||||
|
||||
mdn-polyfills@^5.16.0:
|
||||
version "5.16.0"
|
||||
resolved "https://registry.yarnpkg.com/mdn-polyfills/-/mdn-polyfills-5.16.0.tgz#f44a0c37a47158e1b1c748ac03d9c1be63ad89f7"
|
||||
integrity sha512-1rMxLgeYCwW4a8sUvoyLY7wCdKgMVQdS6me52D0a5lvuTUEAn3Mhi5gFN+9kI0jfea1TUepq72K1AgmbIt2ffw==
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/mdn-polyfills/-/mdn-polyfills-5.17.0.tgz#462b3e34d5c6ba769a32fda2b270e711da634a05"
|
||||
integrity sha512-KntYq3r7jQ3lqjGvQ+1zIv6Yvlt+G3Y3TngDZqzSB7SNBjW7IZ8WyrhHM4LyLWzgUVX53DrC2XR7cymQqbTFkw==
|
||||
|
||||
media-typer@0.3.0:
|
||||
version "0.3.0"
|
||||
@ -13123,9 +13123,9 @@ tslib@1.9.0:
|
||||
integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==
|
||||
|
||||
tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
||||
|
||||
tslint-config-prettier@^1.18.0:
|
||||
version "1.18.0"
|
||||
@ -13236,9 +13236,9 @@ typedarray@^0.0.6:
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typescript@^3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.1.tgz#b6691be11a881ffa9a05765a205cb7383f3b63c6"
|
||||
integrity sha512-3NSMb2VzDQm8oBTLH6Nj55VVtUEpe/rgkIzMir0qVoLyjDZlnMBva0U6vDiV3IH+sl/Yu6oP5QwsAQtHPmDd2Q==
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.1.tgz#ba72a6a600b2158139c5dd8850f700e231464202"
|
||||
integrity sha512-64HkdiRv1yYZsSe4xC1WVgamNigVYjlssIoaH2HcZF0+ijsk5YK2g0G34w9wJkze8+5ow4STd22AynfO6ZYYLw==
|
||||
|
||||
typical@^2.6.1:
|
||||
version "2.6.1"
|
||||
|
Loading…
x
Reference in New Issue
Block a user