mirror of
https://github.com/home-assistant/frontend.git
synced 2026-08-30 03:38:08 +00:00
Compare commits
15
Commits
20200617.0
...
app-alias
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
368973b668 | ||
|
|
b3b42b741d | ||
|
|
020f115d7c | ||
|
|
6891f1df1c | ||
|
|
497494620d | ||
|
|
7a13242077 | ||
|
|
b9d6973a79 | ||
|
|
ed0e8c5e8d | ||
|
|
d8f530f8ac | ||
|
|
a46874b7ff | ||
|
|
cf68f25a03 | ||
|
|
16c604937e | ||
|
|
5cbffb23fd | ||
|
|
6de38d3b85 | ||
|
|
b34ce577d9 |
+1
-5
@@ -66,11 +66,7 @@
|
||||
"import/prefer-default-export": 0,
|
||||
"import/no-unresolved": 0,
|
||||
"import/no-cycle": 0,
|
||||
"import/extensions": [
|
||||
2,
|
||||
"ignorePackages",
|
||||
{ "ts": "never", "js": "never" }
|
||||
],
|
||||
"import/extensions": 0,
|
||||
"no-restricted-syntax": ["error", "LabeledStatement", "WithStatement"],
|
||||
"object-curly-newline": 0,
|
||||
"default-case": 0,
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
import "../../../src/resources/ha-style";
|
||||
import "../../../src/resources/roboto";
|
||||
import "~app/resources/ha-style";
|
||||
import "~app/resources/roboto";
|
||||
import "./layout/hc-connect";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable no-undef */
|
||||
import { CAST_NS } from "../../../src/cast/const";
|
||||
import { HassMessage } from "../../../src/cast/receiver_messages";
|
||||
import "../../../src/resources/custom-card-support";
|
||||
import { CAST_NS } from "~app/cast/const";
|
||||
import { HassMessage } from "~app/cast/receiver_messages";
|
||||
import "~app/resources/custom-card-support";
|
||||
import { castContext } from "./cast_context";
|
||||
import { HcMain } from "./layout/hc-main";
|
||||
import { ReceivedMessage } from "./types";
|
||||
|
||||
@@ -192,6 +192,8 @@ export class HcMain extends HassElement {
|
||||
this._handleNewLovelaceConfig(lovelaceConfig)
|
||||
);
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line
|
||||
console.log("Error fetching Lovelace configuration", err, msg);
|
||||
// Generate a Lovelace config.
|
||||
this._unsubLovelace = () => undefined;
|
||||
await this._generateLovelaceConfig();
|
||||
|
||||
@@ -2,8 +2,8 @@ import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../../src/components/ha-switch";
|
||||
import "../../../src/components/ha-formfield";
|
||||
import "~app/components/ha-switch";
|
||||
import "~app/components/ha-formfield";
|
||||
import "./demo-card";
|
||||
|
||||
class DemoCards extends PolymerElement {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import "../../src/resources/compatibility";
|
||||
import "../../src/resources/roboto";
|
||||
import "~app/resources/compatibility";
|
||||
import "~app/resources/roboto";
|
||||
import "./hassio-main";
|
||||
|
||||
const styleEl = document.createElement("style");
|
||||
|
||||
@@ -14,7 +14,9 @@ import {
|
||||
createHassioSession,
|
||||
fetchHassioHomeAssistantInfo,
|
||||
fetchHassioSupervisorInfo,
|
||||
fetchHassioInfo,
|
||||
HassioHomeAssistantInfo,
|
||||
HassioInfo,
|
||||
HassioPanelInfo,
|
||||
HassioSupervisorInfo,
|
||||
} from "../../src/data/hassio/supervisor";
|
||||
@@ -75,6 +77,8 @@ class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
|
||||
@property() private _hostInfo: HassioHostInfo;
|
||||
|
||||
@property() private _hassioInfo?: HassioInfo;
|
||||
|
||||
@property() private _hassOsInfo?: HassioHassOSInfo;
|
||||
|
||||
@property() private _hassInfo: HassioHomeAssistantInfo;
|
||||
@@ -147,6 +151,7 @@ class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
hass: this.hass,
|
||||
narrow: this.narrow,
|
||||
supervisorInfo: this._supervisorInfo,
|
||||
hassioInfo: this._hassioInfo,
|
||||
hostInfo: this._hostInfo,
|
||||
hassInfo: this._hassInfo,
|
||||
hassOsInfo: this._hassOsInfo,
|
||||
@@ -156,6 +161,7 @@ class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
el.hass = this.hass;
|
||||
el.narrow = this.narrow;
|
||||
el.supervisorInfo = this._supervisorInfo;
|
||||
el.hassioInfo = this._hassioInfo;
|
||||
el.hostInfo = this._hostInfo;
|
||||
el.hassInfo = this._hassInfo;
|
||||
el.hassOsInfo = this._hassOsInfo;
|
||||
@@ -169,12 +175,14 @@ class HassioMain extends ProvideHassLitMixin(HassRouterPage) {
|
||||
return;
|
||||
}
|
||||
|
||||
const [supervisorInfo, hostInfo, hassInfo] = await Promise.all([
|
||||
const [supervisorInfo, hostInfo, hassInfo, hassioInfo] = await Promise.all([
|
||||
fetchHassioSupervisorInfo(this.hass),
|
||||
fetchHassioHostInfo(this.hass),
|
||||
fetchHassioHomeAssistantInfo(this.hass),
|
||||
fetchHassioInfo(this.hass),
|
||||
]);
|
||||
this._supervisorInfo = supervisorInfo;
|
||||
this._hassioInfo = hassioInfo;
|
||||
this._hostInfo = hostInfo;
|
||||
this._hassInfo = hassInfo;
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host";
|
||||
import {
|
||||
HassioHomeAssistantInfo,
|
||||
HassioSupervisorInfo,
|
||||
HassioInfo,
|
||||
} from "../../src/data/hassio/supervisor";
|
||||
import {
|
||||
HassRouterPage,
|
||||
@@ -26,6 +27,8 @@ class HassioPanelRouter extends HassRouterPage {
|
||||
|
||||
@property({ attribute: false }) public supervisorInfo: HassioSupervisorInfo;
|
||||
|
||||
@property({ attribute: false }) public hassioInfo!: HassioInfo;
|
||||
|
||||
@property({ attribute: false }) public hostInfo: HassioHostInfo;
|
||||
|
||||
@property({ attribute: false }) public hassInfo: HassioHomeAssistantInfo;
|
||||
@@ -54,6 +57,7 @@ class HassioPanelRouter extends HassRouterPage {
|
||||
el.route = this.route;
|
||||
el.narrow = this.narrow;
|
||||
el.supervisorInfo = this.supervisorInfo;
|
||||
el.hassioInfo = this.hassioInfo;
|
||||
el.hostInfo = this.hostInfo;
|
||||
el.hassInfo = this.hassInfo;
|
||||
el.hassOsInfo = this.hassOsInfo;
|
||||
|
||||
@@ -10,6 +10,7 @@ import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host";
|
||||
import {
|
||||
HassioHomeAssistantInfo,
|
||||
HassioSupervisorInfo,
|
||||
HassioInfo,
|
||||
} from "../../src/data/hassio/supervisor";
|
||||
import type { PageNavigation } from "../../src/layouts/hass-tabs-subpage";
|
||||
import { HomeAssistant, Route } from "../../src/types";
|
||||
@@ -48,6 +49,8 @@ class HassioPanel extends LitElement {
|
||||
|
||||
@property({ attribute: false }) public supervisorInfo!: HassioSupervisorInfo;
|
||||
|
||||
@property({ attribute: false }) public hassioInfo!: HassioInfo;
|
||||
|
||||
@property({ attribute: false }) public hostInfo!: HassioHostInfo;
|
||||
|
||||
@property({ attribute: false }) public hassInfo!: HassioHomeAssistantInfo;
|
||||
@@ -61,6 +64,7 @@ class HassioPanel extends LitElement {
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
.supervisorInfo=${this.supervisorInfo}
|
||||
.hassioInfo=${this.hassioInfo}
|
||||
.hostInfo=${this.hostInfo}
|
||||
.hassInfo=${this.hassInfo}
|
||||
.hassOsInfo=${this.hassOsInfo}
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
shutdownHost,
|
||||
updateOS,
|
||||
} from "../../../src/data/hassio/host";
|
||||
import { HassioInfo } from "../../../src/data/hassio/supervisor";
|
||||
import {
|
||||
showAlertDialog,
|
||||
showConfirmationDialog,
|
||||
@@ -35,6 +36,8 @@ class HassioHostInfo extends LitElement {
|
||||
|
||||
@property() public hostInfo!: HassioHostInfoType;
|
||||
|
||||
@property({ attribute: false }) public hassioInfo!: HassioInfo;
|
||||
|
||||
@property() public hassOsInfo!: HassioHassOSInfo;
|
||||
|
||||
@property() private _errors?: string;
|
||||
@@ -54,6 +57,12 @@ class HassioHostInfo extends LitElement {
|
||||
<td>System</td>
|
||||
<td>${this.hostInfo.operating_system}</td>
|
||||
</tr>
|
||||
${!this.hostInfo.features.includes("hassos")
|
||||
? html`<tr>
|
||||
<td>Docker version</td>
|
||||
<td>${this.hassioInfo.docker}</td>
|
||||
</tr>`
|
||||
: ""}
|
||||
${this.hostInfo.deployment
|
||||
? html`
|
||||
<tr>
|
||||
|
||||
@@ -11,7 +11,10 @@ import {
|
||||
HassioHassOSInfo,
|
||||
HassioHostInfo,
|
||||
} from "../../../src/data/hassio/host";
|
||||
import { HassioSupervisorInfo } from "../../../src/data/hassio/supervisor";
|
||||
import {
|
||||
HassioSupervisorInfo,
|
||||
HassioInfo,
|
||||
} from "../../../src/data/hassio/supervisor";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
import { haStyle } from "../../../src/resources/styles";
|
||||
import { HomeAssistant, Route } from "../../../src/types";
|
||||
@@ -31,9 +34,11 @@ class HassioSystem extends LitElement {
|
||||
|
||||
@property() public supervisorInfo!: HassioSupervisorInfo;
|
||||
|
||||
@property({ attribute: false }) public hassioInfo!: HassioInfo;
|
||||
|
||||
@property() public hostInfo!: HassioHostInfo;
|
||||
|
||||
@property() public hassOsInfo!: HassioHassOSInfo;
|
||||
@property({ attribute: false }) public hassOsInfo!: HassioHassOSInfo;
|
||||
|
||||
public render(): TemplateResult | void {
|
||||
return html`
|
||||
@@ -55,6 +60,7 @@ class HassioSystem extends LitElement {
|
||||
></hassio-supervisor-info>
|
||||
<hassio-host-info
|
||||
.hass=${this.hass}
|
||||
.hassioInfo=${this.hassioInfo}
|
||||
.hostInfo=${this.hostInfo}
|
||||
.hassOsInfo=${this.hassOsInfo}
|
||||
></hassio-host-info>
|
||||
|
||||
+5
-1
@@ -22,6 +22,7 @@
|
||||
"author": "Paulus Schoutsen <[email protected]> (http://paulusschoutsen.nl)",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"~app": "file:./src",
|
||||
"@formatjs/intl-pluralrules": "^1.5.8",
|
||||
"@fullcalendar/core": "^5.0.0-beta.2",
|
||||
"@fullcalendar/daygrid": "^5.0.0-beta.2",
|
||||
@@ -74,6 +75,7 @@
|
||||
"@thomasloven/round-slider": "0.5.0",
|
||||
"@vaadin/vaadin-combo-box": "^5.0.10",
|
||||
"@vaadin/vaadin-date-picker": "^4.0.7",
|
||||
"@vue/web-component-wrapper": "^1.2.0",
|
||||
"@webcomponents/webcomponentsjs": "^2.2.7",
|
||||
"chart.js": "~2.8.0",
|
||||
"chartjs-chart-timeline": "^0.3.0",
|
||||
@@ -106,6 +108,8 @@
|
||||
"roboto-fontface": "^0.10.0",
|
||||
"superstruct": "^0.6.1",
|
||||
"unfetch": "^4.1.0",
|
||||
"vue": "^2.6.11",
|
||||
"vue2-daterange-picker": "^0.5.1",
|
||||
"web-animations-js": "^2.3.2",
|
||||
"workbox-core": "^5.1.3",
|
||||
"workbox-precaching": "^5.1.3",
|
||||
@@ -185,7 +189,7 @@
|
||||
"sinon": "^7.3.1",
|
||||
"source-map-url": "^0.4.0",
|
||||
"systemjs": "^6.3.2",
|
||||
"terser-webpack-plugin": "^1.2.3",
|
||||
"terser-webpack-plugin": "^3.0.6",
|
||||
"ts-lit-plugin": "^1.1.10",
|
||||
"ts-mocha": "^6.0.0",
|
||||
"typescript": "^3.8.3",
|
||||
|
||||
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name="home-assistant-frontend",
|
||||
version="20200617.0",
|
||||
version="20200620.0",
|
||||
description="The Home Assistant frontend",
|
||||
url="https://github.com/home-assistant/home-assistant-polymer",
|
||||
author="The Home Assistant Authors",
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
import Vue from "vue";
|
||||
import wrap from "@vue/web-component-wrapper";
|
||||
import DateRangePicker from "vue2-daterange-picker";
|
||||
// @ts-ignore
|
||||
import dateRangePickerStyles from "vue2-daterange-picker/dist/vue2-daterange-picker.css";
|
||||
import { fireEvent } from "../common/dom/fire_event";
|
||||
import { Constructor } from "../types";
|
||||
import { customElement } from "lit-element/lib/decorators";
|
||||
|
||||
const Component = Vue.extend({
|
||||
props: {
|
||||
twentyfourHours: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
ranges: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
startDate: {
|
||||
type: [String, Date],
|
||||
default() {
|
||||
return new Date();
|
||||
},
|
||||
},
|
||||
endDate: {
|
||||
type: [String, Date],
|
||||
default() {
|
||||
return new Date();
|
||||
},
|
||||
},
|
||||
},
|
||||
render(createElement) {
|
||||
// @ts-ignore
|
||||
return createElement(DateRangePicker, {
|
||||
props: {
|
||||
"time-picker": true,
|
||||
"auto-apply": false,
|
||||
opens: "right",
|
||||
"show-dropdowns": false,
|
||||
"time-picker24-hour": this.twentyfourHours,
|
||||
disabled: this.disabled,
|
||||
ranges: this.ranges ? {} : false,
|
||||
},
|
||||
model: {
|
||||
value: {
|
||||
startDate: this.startDate,
|
||||
endDate: this.endDate,
|
||||
},
|
||||
callback: (value) => {
|
||||
// @ts-ignore
|
||||
fireEvent(this.$el as HTMLElement, "change", value);
|
||||
},
|
||||
expression: "dateRange",
|
||||
},
|
||||
scopedSlots: {
|
||||
input() {
|
||||
return createElement("slot", {
|
||||
domProps: { name: "input" },
|
||||
});
|
||||
},
|
||||
header() {
|
||||
return createElement("slot", {
|
||||
domProps: { name: "header" },
|
||||
});
|
||||
},
|
||||
ranges() {
|
||||
return createElement("slot", {
|
||||
domProps: { name: "ranges" },
|
||||
});
|
||||
},
|
||||
footer() {
|
||||
return createElement("slot", {
|
||||
domProps: { name: "footer" },
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const WrappedElement: Constructor<HTMLElement> = wrap(Vue, Component);
|
||||
|
||||
@customElement("date-range-picker")
|
||||
class DateRangePickerElement extends WrappedElement {
|
||||
constructor() {
|
||||
super();
|
||||
const style = document.createElement("style");
|
||||
style.innerHTML = `
|
||||
${dateRangePickerStyles}
|
||||
.calendars {
|
||||
display: flex;
|
||||
}
|
||||
.daterangepicker {
|
||||
left: 0px !important;
|
||||
top: auto;
|
||||
background-color: var(--card-background-color);
|
||||
border: none;
|
||||
border-radius: var(--ha-card-border-radius, 4px);
|
||||
box-shadow: var(
|
||||
--ha-card-box-shadow,
|
||||
0px 2px 1px -1px rgba(0, 0, 0, 0.2),
|
||||
0px 1px 1px 0px rgba(0, 0, 0, 0.14),
|
||||
0px 1px 3px 0px rgba(0, 0, 0, 0.12)
|
||||
);
|
||||
color: var(--primary-text-color);
|
||||
min-width: initial !important;
|
||||
}
|
||||
.daterangepicker:after {
|
||||
border-bottom: 6px solid var(--card-background-color);
|
||||
}
|
||||
.daterangepicker .calendar-table {
|
||||
background-color: var(--card-background-color);
|
||||
border: none;
|
||||
}
|
||||
.daterangepicker .calendar-table td,
|
||||
.daterangepicker .calendar-table th {
|
||||
background-color: transparent;
|
||||
color: var(--secondary-text-color);
|
||||
border-radius: 0;
|
||||
outline: none;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
.daterangepicker td.off,
|
||||
.daterangepicker td.off.end-date,
|
||||
.daterangepicker td.off.in-range,
|
||||
.daterangepicker td.off.start-date {
|
||||
background-color: var(--secondary-background-color);
|
||||
color: var(--disabled-text-color);
|
||||
}
|
||||
.daterangepicker td.in-range {
|
||||
background-color: var(--light-primary-color);
|
||||
color: var(--primary-text-color);
|
||||
}
|
||||
.daterangepicker td.active,
|
||||
.daterangepicker td.active:hover {
|
||||
background-color: var(--primary-color);
|
||||
color: var(--text-primary-color);
|
||||
}
|
||||
.daterangepicker td.start-date.end-date {
|
||||
border-radius: 50%;
|
||||
}
|
||||
.daterangepicker td.start-date {
|
||||
border-radius: 50% 0 0 50%;
|
||||
}
|
||||
.daterangepicker td.end-date {
|
||||
border-radius: 0 50% 50% 0;
|
||||
}
|
||||
.reportrange-text {
|
||||
background: none !important;
|
||||
padding: 0 !important;
|
||||
border: none !important;
|
||||
}
|
||||
.daterangepicker .calendar-table .next span,
|
||||
.daterangepicker .calendar-table .prev span {
|
||||
border: solid var(--primary-text-color);
|
||||
border-width: 0 2px 2px 0;
|
||||
}
|
||||
.daterangepicker .ranges li {
|
||||
outline: none;
|
||||
}
|
||||
.daterangepicker .ranges li:hover {
|
||||
background-color: var(--secondary-background-color);
|
||||
}
|
||||
.daterangepicker .ranges li.active {
|
||||
background-color: var(--primary-color);
|
||||
color: var(--text-primary-color);
|
||||
}
|
||||
.daterangepicker select.ampmselect,
|
||||
.daterangepicker select.hourselect,
|
||||
.daterangepicker select.minuteselect,
|
||||
.daterangepicker select.secondselect {
|
||||
background: transparent;
|
||||
border: 1px solid var(--divider-color);
|
||||
color: var(--primary-color);
|
||||
}
|
||||
.daterangepicker .drp-buttons .btn {
|
||||
border: 1px solid var(--primary-color);
|
||||
background-color: transparent;
|
||||
color: var(--primary-color);
|
||||
border-radius: 4px;
|
||||
padding: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.calendars-container {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.drp-calendar.col.right .calendar-table {
|
||||
display: none;
|
||||
}
|
||||
.daterangepicker.show-ranges .drp-calendar.left {
|
||||
border-left: 0px;
|
||||
}
|
||||
.daterangepicker .drp-calendar.left {
|
||||
padding: 8px;
|
||||
}
|
||||
.daterangepicker.show-calendar .ranges {
|
||||
margin-top: 0;
|
||||
padding-top: 8px;
|
||||
border-right: 1px solid var(--divider-color);
|
||||
}
|
||||
@media only screen and (max-width: 800px) {
|
||||
.calendars {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
.calendar-table {
|
||||
padding: 0 !important;
|
||||
}
|
||||
`;
|
||||
const shadowRoot = this.shadowRoot!;
|
||||
shadowRoot.appendChild(style);
|
||||
// Stop click events from reaching the document, otherwise it will close the picker immediately.
|
||||
shadowRoot.addEventListener("click", (ev) => ev.stopPropagation());
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"date-range-picker": DateRangePickerElement;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
import {
|
||||
css,
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../types";
|
||||
import { mdiCalendar } from "@mdi/js";
|
||||
import { formatDateTime } from "../common/datetime/format_date_time";
|
||||
import "@material/mwc-button/mwc-button";
|
||||
import "@material/mwc-list/mwc-list-item";
|
||||
import "./ha-svg-icon";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@material/mwc-list/mwc-list";
|
||||
import "./date-range-picker";
|
||||
|
||||
export interface DateRangePickerRanges {
|
||||
[key: string]: [Date, Date];
|
||||
}
|
||||
|
||||
@customElement("ha-date-range-picker")
|
||||
export class HaDateRangePicker extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() public startDate!: Date;
|
||||
|
||||
@property() public endDate!: Date;
|
||||
|
||||
@property() public ranges?: DateRangePickerRanges;
|
||||
|
||||
@property({ type: Boolean }) public disabled = false;
|
||||
|
||||
@property({ type: Boolean }) private _hour24format = false;
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
if (changedProps.has("hass")) {
|
||||
const oldHass = changedProps.get("hass") as HomeAssistant | undefined;
|
||||
if (!oldHass || oldHass.language !== this.hass.language) {
|
||||
this._hour24format = this._compute24hourFormat();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<date-range-picker
|
||||
?disabled=${this.disabled}
|
||||
twentyfour-hours=${this._hour24format}
|
||||
start-date=${this.startDate}
|
||||
end-date=${this.endDate}
|
||||
?ranges=${this.ranges !== undefined}
|
||||
>
|
||||
<div slot="input" class="date-range-inputs">
|
||||
<ha-svg-icon path=${mdiCalendar}></ha-svg-icon>
|
||||
<paper-input
|
||||
.value=${formatDateTime(this.startDate, this.hass.language)}
|
||||
.label=${this.hass.localize(
|
||||
"ui.components.date-range-picker.start_date"
|
||||
)}
|
||||
.disabled=${this.disabled}
|
||||
@click=${this._handleInputClick}
|
||||
readonly
|
||||
></paper-input>
|
||||
<paper-input
|
||||
.value=${formatDateTime(this.endDate, this.hass.language)}
|
||||
label=${this.hass.localize(
|
||||
"ui.components.date-range-picker.end_date"
|
||||
)}
|
||||
.disabled=${this.disabled}
|
||||
@click=${this._handleInputClick}
|
||||
readonly
|
||||
></paper-input>
|
||||
</div>
|
||||
${this.ranges
|
||||
? html`<div slot="ranges" class="date-range-ranges">
|
||||
<mwc-list @click=${this._setDateRange}>
|
||||
${Object.entries(this.ranges).map(
|
||||
([name, dates]) => html`<mwc-list-item
|
||||
.activated=${this.startDate.getTime() ===
|
||||
dates[0].getTime() &&
|
||||
this.endDate.getTime() === dates[1].getTime()}
|
||||
.startDate=${dates[0]}
|
||||
.endDate=${dates[1]}
|
||||
>
|
||||
${name}
|
||||
</mwc-list-item>`
|
||||
)}
|
||||
</mwc-list>
|
||||
</div>`
|
||||
: ""}
|
||||
<div slot="footer" class="date-range-footer">
|
||||
<mwc-button @click=${this._cancelDateRange}
|
||||
>${this.hass.localize("ui.common.cancel")}</mwc-button
|
||||
>
|
||||
<mwc-button @click=${this._applyDateRange}
|
||||
>${this.hass.localize(
|
||||
"ui.components.date-range-picker.select"
|
||||
)}</mwc-button
|
||||
>
|
||||
</div>
|
||||
</date-range-picker>
|
||||
`;
|
||||
}
|
||||
|
||||
private _compute24hourFormat() {
|
||||
return (
|
||||
new Intl.DateTimeFormat(this.hass.language, {
|
||||
hour: "numeric",
|
||||
})
|
||||
.formatToParts(new Date(2020, 0, 1, 13))
|
||||
.find((part) => part.type === "hour")!.value.length === 2
|
||||
);
|
||||
}
|
||||
|
||||
private _setDateRange(ev: Event) {
|
||||
const target = ev.target as any;
|
||||
const startDate = target.startDate;
|
||||
const endDate = target.endDate;
|
||||
const dateRangePicker = this._dateRangePicker;
|
||||
dateRangePicker.clickRange([startDate, endDate]);
|
||||
dateRangePicker.clickedApply();
|
||||
}
|
||||
|
||||
private _cancelDateRange() {
|
||||
this._dateRangePicker.clickCancel();
|
||||
}
|
||||
|
||||
private _applyDateRange() {
|
||||
this._dateRangePicker.clickedApply();
|
||||
}
|
||||
|
||||
private get _dateRangePicker() {
|
||||
const dateRangePicker = this.shadowRoot!.querySelector(
|
||||
"date-range-picker"
|
||||
) as any;
|
||||
return dateRangePicker.vueComponent.$children[0];
|
||||
}
|
||||
|
||||
private _handleInputClick() {
|
||||
// close the date picker, so it will open again on the click event
|
||||
if (this._dateRangePicker.open) {
|
||||
this._dateRangePicker.open = false;
|
||||
}
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return css`
|
||||
ha-svg-icon {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.date-range-inputs {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.date-range-ranges {
|
||||
border-right: 1px solid var(--divider-color);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
.date-range-ranges {
|
||||
border-right: none;
|
||||
border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
}
|
||||
|
||||
.date-range-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 8px;
|
||||
border-top: 1px solid var(--divider-color);
|
||||
}
|
||||
|
||||
paper-input {
|
||||
display: inline-block;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
paper-input:last-child {
|
||||
margin-left: 8px;
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"ha-date-range-picker": HaDateRangePicker;
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import { HomeAssistant } from "../types";
|
||||
import { DataEntryFlowProgress, DataEntryFlowStep } from "./data_entry_flow";
|
||||
import { domainToName } from "./integration";
|
||||
|
||||
export const DISCOVERY_SOURCES = ["unignore", "homekit", "ssdp", "zeroconf"];
|
||||
export const DISCOVERY_SOURCES = ["unignore", "homekit", "ssdp", "zeroconf", "discovery"];
|
||||
|
||||
export const createConfigFlow = (hass: HomeAssistant, handler: string) =>
|
||||
hass.callApi<DataEntryFlowStep>("POST", "config/config_entries/flow", {
|
||||
|
||||
@@ -4,6 +4,20 @@ import { hassioApiResultExtractor, HassioResponse } from "./common";
|
||||
export type HassioHomeAssistantInfo = any;
|
||||
export type HassioSupervisorInfo = any;
|
||||
|
||||
export type HassioInfo = {
|
||||
arch: string;
|
||||
channel: string;
|
||||
docker: string;
|
||||
hassos?: string;
|
||||
homeassistant: string;
|
||||
hostname: string;
|
||||
logging: string;
|
||||
maching: string;
|
||||
supervisor: string;
|
||||
supported_arch: string[];
|
||||
timezone: string;
|
||||
};
|
||||
|
||||
export type HassioPanelInfo = PanelInfo<
|
||||
| undefined
|
||||
| {
|
||||
@@ -38,6 +52,12 @@ export const fetchHassioSupervisorInfo = async (hass: HomeAssistant) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const fetchHassioInfo = async (hass: HomeAssistant) => {
|
||||
return hassioApiResultExtractor(
|
||||
await hass.callApi<HassioResponse<HassioInfo>>("GET", "hassio/info")
|
||||
);
|
||||
};
|
||||
|
||||
export const fetchHassioLogs = async (
|
||||
hass: HomeAssistant,
|
||||
provider: string
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { HomeAssistant } from "../types";
|
||||
|
||||
export interface LogbookEntry {
|
||||
when: string;
|
||||
name: string;
|
||||
@@ -6,3 +8,60 @@ export interface LogbookEntry {
|
||||
domain: string;
|
||||
context_user_id?: string;
|
||||
}
|
||||
|
||||
const DATA_CACHE: {
|
||||
[cacheKey: string]: { [entityId: string]: Promise<LogbookEntry[]> };
|
||||
} = {};
|
||||
|
||||
export const getLogbookData = (
|
||||
hass: HomeAssistant,
|
||||
startDate: string,
|
||||
endDate: string,
|
||||
entityId?: string
|
||||
) => {
|
||||
const ALL_ENTITIES = "*";
|
||||
|
||||
if (!entityId) {
|
||||
entityId = ALL_ENTITIES;
|
||||
}
|
||||
|
||||
const cacheKey = `${startDate}${endDate}`;
|
||||
|
||||
if (!DATA_CACHE[cacheKey]) {
|
||||
DATA_CACHE[cacheKey] = {};
|
||||
}
|
||||
|
||||
if (DATA_CACHE[cacheKey][entityId]) {
|
||||
return DATA_CACHE[cacheKey][entityId];
|
||||
}
|
||||
|
||||
if (entityId !== ALL_ENTITIES && DATA_CACHE[cacheKey][ALL_ENTITIES]) {
|
||||
return DATA_CACHE[cacheKey][ALL_ENTITIES].then((entities) =>
|
||||
entities.filter((entity) => entity.entity_id === entityId)
|
||||
);
|
||||
}
|
||||
|
||||
DATA_CACHE[cacheKey][entityId] = getLogbookDataFromServer(
|
||||
hass,
|
||||
startDate,
|
||||
endDate,
|
||||
entityId !== ALL_ENTITIES ? entityId : undefined
|
||||
).then((entries) => entries.reverse());
|
||||
return DATA_CACHE[cacheKey][entityId];
|
||||
};
|
||||
|
||||
const getLogbookDataFromServer = async (
|
||||
hass: HomeAssistant,
|
||||
startDate: string,
|
||||
endDate: string,
|
||||
entityId?: string
|
||||
) => {
|
||||
const url = `logbook/${startDate}?end_time=${endDate}${
|
||||
entityId ? `&entity=${entityId}` : ""
|
||||
}`;
|
||||
return hass.callApi<LogbookEntry[]>("GET", url);
|
||||
};
|
||||
|
||||
export const clearLogbookCache = (startDate, endDate) => {
|
||||
DATA_CACHE[`${startDate}${endDate}`] = {};
|
||||
};
|
||||
|
||||
@@ -86,7 +86,7 @@ class MoreInfoControls extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
||||
<div class="main-title" main-title="" on-click="enlarge">
|
||||
[[_computeStateName(stateObj)]]
|
||||
</div>
|
||||
<template is="dom-if" if="[[_computeConfig(hass)]]">
|
||||
<template is="dom-if" if="[[hass.user.is_admin]]">
|
||||
<ha-icon-button
|
||||
aria-label$="[[localize('ui.dialogs.more_info_control.settings')]]"
|
||||
icon="hass:settings"
|
||||
@@ -219,10 +219,6 @@ class MoreInfoControls extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
||||
return stateObj ? computeStateName(stateObj) : "";
|
||||
}
|
||||
|
||||
_computeConfig(hass) {
|
||||
return hass.user.is_admin && isComponentLoaded(hass, "config");
|
||||
}
|
||||
|
||||
_computeEdit(hass, stateObj) {
|
||||
const domain = this._computeDomain(stateObj);
|
||||
return (
|
||||
|
||||
+25
-22
@@ -8,15 +8,18 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { computeStateName } from "../../common/entity/compute_state_name";
|
||||
import "../../components/ha-dialog";
|
||||
import "../../components/ha-switch";
|
||||
import "../../components/ha-formfield";
|
||||
import type { HaSwitch } from "../../components/ha-switch";
|
||||
import { computeDeviceName } from "../../data/device_registry";
|
||||
import { fetchMQTTDebugInfo, MQTTDeviceDebugInfo } from "../../data/mqtt";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { computeStateName } from "../../../../../../common/entity/compute_state_name";
|
||||
import "../../../../../../components/ha-dialog";
|
||||
import "../../../../../../components/ha-switch";
|
||||
import "../../../../../../components/ha-formfield";
|
||||
import type { HaSwitch } from "../../../../../../components/ha-switch";
|
||||
import { computeDeviceName } from "../../../../../../data/device_registry";
|
||||
import {
|
||||
fetchMQTTDebugInfo,
|
||||
MQTTDeviceDebugInfo,
|
||||
} from "../../../../../../data/mqtt";
|
||||
import { haStyleDialog } from "../../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../../types";
|
||||
import "./mqtt-discovery-payload";
|
||||
import "./mqtt-messages";
|
||||
import { MQTTDeviceDebugInfoDialogParams } from "./show-dialog-mqtt-device-debug-info";
|
||||
@@ -187,19 +190,19 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
|
||||
<li class="triggerlistitem">
|
||||
MQTT discovery data:
|
||||
<ul class="discoverydata">
|
||||
<li>
|
||||
Topic:
|
||||
<code>${trigger.discovery_data.topic}</code>
|
||||
</li>
|
||||
<li>
|
||||
<mqtt-discovery-payload
|
||||
.hass=${this.hass}
|
||||
.payload=${trigger.discovery_data.payload}
|
||||
.showAsYaml=${this._showAsYaml}
|
||||
.summary=${"Payload"}
|
||||
>
|
||||
</li>
|
||||
</mqtt-discovery-payload>
|
||||
<li>
|
||||
Topic:
|
||||
<code>${trigger.discovery_data.topic}</code>
|
||||
</li>
|
||||
<li>
|
||||
<mqtt-discovery-payload
|
||||
.hass=${this.hass}
|
||||
.payload=${trigger.discovery_data.payload}
|
||||
.showAsYaml=${this._showAsYaml}
|
||||
.summary=${"Payload"}
|
||||
>
|
||||
</mqtt-discovery-payload>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
`
|
||||
+6
-6
@@ -7,12 +7,12 @@ import {
|
||||
TemplateResult,
|
||||
css,
|
||||
} from "lit-element";
|
||||
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
|
||||
import { removeMQTTDeviceEntry } from "../../../../../data/mqtt";
|
||||
import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box";
|
||||
import { showMQTTDeviceDebugInfoDialog } from "../../../../../dialogs/mqtt-device-debug-info-dialog/show-dialog-mqtt-device-debug-info";
|
||||
import { haStyle } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||
import { removeMQTTDeviceEntry } from "../../../../../../data/mqtt";
|
||||
import { showConfirmationDialog } from "../../../../../../dialogs/generic/show-dialog-box";
|
||||
import { showMQTTDeviceDebugInfoDialog } from "./show-dialog-mqtt-device-debug-info";
|
||||
import { haStyle } from "../../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../../types";
|
||||
|
||||
@customElement("ha-device-actions-mqtt")
|
||||
export class HaDeviceActionsMqtt extends LitElement {
|
||||
+3
-3
@@ -9,9 +9,9 @@ import {
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { classMap } from "lit-html/directives/class-map";
|
||||
import { formatTimeWithSeconds } from "../../common/datetime/format_time";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { MQTTMessage } from "../../data/mqtt";
|
||||
import { formatTimeWithSeconds } from "../../../../../../common/datetime/format_time";
|
||||
import { HomeAssistant } from "../../../../../../types";
|
||||
import { MQTTMessage } from "../../../../../../data/mqtt";
|
||||
|
||||
@customElement("mqtt-messages")
|
||||
class MQTTMessages extends LitElement {
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import { DeviceRegistryEntry } from "../../data/device_registry";
|
||||
import { fireEvent } from "../../../../../../common/dom/fire_event";
|
||||
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||
|
||||
export interface MQTTDeviceDebugInfoDialogParams {
|
||||
device: DeviceRegistryEntry;
|
||||
+17
-7
@@ -8,17 +8,18 @@ import {
|
||||
css,
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
|
||||
import { haStyle } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||
import { haStyle } from "../../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../../types";
|
||||
import {
|
||||
ZHADevice,
|
||||
fetchZHADevice,
|
||||
reconfigureNode,
|
||||
} from "../../../../../data/zha";
|
||||
import { navigate } from "../../../../../common/navigate";
|
||||
import { showZHADeviceZigbeeInfoDialog } from "../../../../../dialogs/zha-device-zigbee-signature-dialog/show-dialog-zha-device-zigbee-info";
|
||||
import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box";
|
||||
} from "../../../../../../data/zha";
|
||||
import { navigate } from "../../../../../../common/navigate";
|
||||
import { showZHADeviceZigbeeInfoDialog } from "../../../../integrations/integration-panels/zha/show-dialog-zha-device-zigbee-info";
|
||||
import { showConfirmationDialog } from "../../../../../../dialogs/generic/show-dialog-box";
|
||||
import { showZHAClusterDialog } from "../../../../integrations/integration-panels/zha/show-dialog-zha-cluster";
|
||||
|
||||
@customElement("ha-device-actions-zha")
|
||||
export class HaDeviceActionsZha extends LitElement {
|
||||
@@ -72,6 +73,11 @@ export class HaDeviceActionsZha extends LitElement {
|
||||
"ui.dialogs.zha_device_info.buttons.zigbee_information"
|
||||
)}
|
||||
</mwc-button>
|
||||
<mwc-button @click=${this._showClustersDialog}>
|
||||
${this.hass!.localize(
|
||||
"ui.dialogs.zha_device_info.buttons.clusters"
|
||||
)}
|
||||
</mwc-button>
|
||||
<mwc-button class="warning" @click=${this._removeDevice}>
|
||||
${this.hass!.localize(
|
||||
"ui.dialogs.zha_device_info.buttons.remove"
|
||||
@@ -82,6 +88,10 @@ export class HaDeviceActionsZha extends LitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
private async _showClustersDialog(): Promise<void> {
|
||||
await showZHAClusterDialog(this, { device: this._zhaDevice! });
|
||||
}
|
||||
|
||||
private async _onReconfigureNodeClick(): Promise<void> {
|
||||
if (!this.hass) {
|
||||
return;
|
||||
+5
-5
@@ -8,11 +8,11 @@ import {
|
||||
css,
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
|
||||
import { haStyle } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import { ZHADevice, fetchZHADevice } from "../../../../../data/zha";
|
||||
import { formatAsPaddedHex } from "../../../integrations/integration-panels/zha/functions";
|
||||
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||
import { haStyle } from "../../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../../types";
|
||||
import { ZHADevice, fetchZHADevice } from "../../../../../../data/zha";
|
||||
import { formatAsPaddedHex } from "../../../../integrations/integration-panels/zha/functions";
|
||||
|
||||
@customElement("ha-device-info-zha")
|
||||
export class HaDeviceActionsZha extends LitElement {
|
||||
@@ -477,7 +477,9 @@ export class HaConfigDevicePage extends LitElement {
|
||||
): TemplateResult[] {
|
||||
const templates: TemplateResult[] = [];
|
||||
if (integrations.includes("mqtt")) {
|
||||
import("./device-detail/integration-elements/ha-device-actions-mqtt");
|
||||
import(
|
||||
"./device-detail/integration-elements/mqtt/ha-device-actions-mqtt"
|
||||
);
|
||||
templates.push(html`
|
||||
<div class="card-actions" slot="actions">
|
||||
<ha-device-actions-mqtt
|
||||
@@ -488,8 +490,8 @@ export class HaConfigDevicePage extends LitElement {
|
||||
`);
|
||||
}
|
||||
if (integrations.includes("zha")) {
|
||||
import("./device-detail/integration-elements/ha-device-actions-zha");
|
||||
import("./device-detail/integration-elements/ha-device-info-zha");
|
||||
import("./device-detail/integration-elements/zha/ha-device-actions-zha");
|
||||
import("./device-detail/integration-elements/zha/ha-device-info-zha");
|
||||
templates.push(html`
|
||||
<ha-device-info-zha
|
||||
.hass=${this.hass}
|
||||
|
||||
@@ -323,6 +323,13 @@ class HaPanelConfig extends HassRouterPage {
|
||||
/* webpackChunkName: "panel-config-zwave" */ "./integrations/integration-panels/zwave/ha-config-zwave"
|
||||
),
|
||||
},
|
||||
mqtt: {
|
||||
tag: "mqtt-config-panel",
|
||||
load: () =>
|
||||
import(
|
||||
/* webpackChunkName: "panel-config-mqtt" */ "./integrations/integration-panels/mqtt/mqtt-config-panel"
|
||||
),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -46,6 +46,10 @@ declare global {
|
||||
}
|
||||
|
||||
const integrationsWithPanel = {
|
||||
mqtt: {
|
||||
buttonLocalizeKey: "ui.panel.config.mqtt.button",
|
||||
path: "/config/mqtt",
|
||||
},
|
||||
zha: {
|
||||
buttonLocalizeKey: "ui.panel.config.zha.button",
|
||||
path: "/config/zha/dashboard",
|
||||
|
||||
+39
-40
@@ -9,13 +9,14 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-code-editor";
|
||||
import { haStyle } from "../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import "../../../../../components/ha-card";
|
||||
import "../../../../../components/ha-code-editor";
|
||||
import { haStyle } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import "./mqtt-subscribe-card";
|
||||
import "../../../../../layouts/hass-subpage";
|
||||
|
||||
@customElement("developer-tools-mqtt")
|
||||
@customElement("mqtt-config-panel")
|
||||
class HaPanelDevMqtt extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@@ -37,43 +38,41 @@ class HaPanelDevMqtt extends LitElement {
|
||||
|
||||
protected render(): TemplateResult {
|
||||
return html`
|
||||
<div class="content">
|
||||
<ha-card
|
||||
header="${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.description_publish"
|
||||
)}"
|
||||
>
|
||||
<div class="card-content">
|
||||
<paper-input
|
||||
label="${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.topic"
|
||||
)}"
|
||||
.value=${this.topic}
|
||||
@value-changed=${this._handleTopic}
|
||||
></paper-input>
|
||||
<hass-subpage>
|
||||
<div class="content">
|
||||
<ha-card
|
||||
header="${this.hass.localize(
|
||||
"ui.panel.config.mqtt.description_publish"
|
||||
)}"
|
||||
>
|
||||
<div class="card-content">
|
||||
<paper-input
|
||||
label="${this.hass.localize("ui.panel.config.mqtt.topic")}"
|
||||
.value=${this.topic}
|
||||
@value-changed=${this._handleTopic}
|
||||
></paper-input>
|
||||
|
||||
<p>
|
||||
${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.payload"
|
||||
)}
|
||||
</p>
|
||||
<ha-code-editor
|
||||
mode="jinja2"
|
||||
.value="${this.payload}"
|
||||
@value-changed=${this._handlePayload}
|
||||
></ha-code-editor>
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._publish}
|
||||
>${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.publish"
|
||||
)}</mwc-button
|
||||
>
|
||||
</div>
|
||||
</ha-card>
|
||||
<p>
|
||||
${this.hass.localize("ui.panel.config.mqtt.payload")}
|
||||
</p>
|
||||
<ha-code-editor
|
||||
mode="jinja2"
|
||||
.value="${this.payload}"
|
||||
@value-changed=${this._handlePayload}
|
||||
></ha-code-editor>
|
||||
</div>
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._publish}
|
||||
>${this.hass.localize(
|
||||
"ui.panel.config.mqtt.publish"
|
||||
)}</mwc-button
|
||||
>
|
||||
</div>
|
||||
</ha-card>
|
||||
|
||||
<mqtt-subscribe-card .hass=${this.hass}></mqtt-subscribe-card>
|
||||
</div>
|
||||
<mqtt-subscribe-card .hass=${this.hass}></mqtt-subscribe-card>
|
||||
</div>
|
||||
</hass-subpage>
|
||||
`;
|
||||
}
|
||||
|
||||
+10
-18
@@ -9,10 +9,10 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { formatTime } from "../../../common/datetime/format_time";
|
||||
import "../../../components/ha-card";
|
||||
import { MQTTMessage, subscribeMQTTTopic } from "../../../data/mqtt";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { formatTime } from "../../../../../common/datetime/format_time";
|
||||
import "../../../../../components/ha-card";
|
||||
import { MQTTMessage, subscribeMQTTTopic } from "../../../../../data/mqtt";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
|
||||
@customElement("mqtt-subscribe-card")
|
||||
class MqttSubscribeCard extends LitElement {
|
||||
@@ -43,18 +43,14 @@ class MqttSubscribeCard extends LitElement {
|
||||
return html`
|
||||
<ha-card
|
||||
header="${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.description_listen"
|
||||
"ui.panel.config.mqtt.description_listen"
|
||||
)}"
|
||||
>
|
||||
<form>
|
||||
<paper-input
|
||||
.label=${this._subscribed
|
||||
? this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.listening_to"
|
||||
)
|
||||
: this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.subscribe_to"
|
||||
)}
|
||||
? this.hass.localize("ui.panel.config.mqtt.listening_to")
|
||||
: this.hass.localize("ui.panel.config.mqtt.subscribe_to")}
|
||||
.disabled=${this._subscribed !== undefined}
|
||||
.value=${this._topic}
|
||||
@value-changed=${this._valueChanged}
|
||||
@@ -65,12 +61,8 @@ class MqttSubscribeCard extends LitElement {
|
||||
type="submit"
|
||||
>
|
||||
${this._subscribed
|
||||
? this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.stop_listening"
|
||||
)
|
||||
: this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.start_listening"
|
||||
)}
|
||||
? this.hass.localize("ui.panel.config.mqtt.stop_listening")
|
||||
: this.hass.localize("ui.panel.config.mqtt.start_listening")}
|
||||
</mwc-button>
|
||||
</form>
|
||||
<div class="events">
|
||||
@@ -78,7 +70,7 @@ class MqttSubscribeCard extends LitElement {
|
||||
(msg) => html`
|
||||
<div class="event">
|
||||
${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.message_received",
|
||||
"ui.panel.config.mqtt.message_received",
|
||||
"id",
|
||||
msg.id,
|
||||
"topic",
|
||||
@@ -0,0 +1,143 @@
|
||||
import {
|
||||
CSSResult,
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import "../../../../../components/ha-code-editor";
|
||||
import { createCloseHeading } from "../../../../../components/ha-dialog";
|
||||
import { haStyleDialog } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import { ZHADeviceZigbeeInfoDialogParams } from "./show-dialog-zha-device-zigbee-info";
|
||||
import {
|
||||
ZHADevice,
|
||||
Cluster,
|
||||
ZHAGroup,
|
||||
fetchBindableDevices,
|
||||
fetchGroups,
|
||||
} from "../../../../../data/zha";
|
||||
import { ZHAClusterSelectedParams } from "./types";
|
||||
import "./zha-cluster-attributes";
|
||||
import "./zha-cluster-commands";
|
||||
import "./zha-clusters";
|
||||
import "./zha-device-binding";
|
||||
import "./zha-group-binding";
|
||||
import { HASSDomEvent } from "../../../../../common/dom/fire_event";
|
||||
import { sortZHADevices, sortZHAGroups } from "./functions";
|
||||
|
||||
@customElement("dialog-zha-cluster")
|
||||
class DialogZHACluster extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property() private _device?: ZHADevice;
|
||||
|
||||
@property() private _selectedCluster?: Cluster;
|
||||
|
||||
@property() private _bindableDevices: ZHADevice[] = [];
|
||||
|
||||
@property() private _groups: ZHAGroup[] = [];
|
||||
|
||||
public async showDialog(
|
||||
params: ZHADeviceZigbeeInfoDialogParams
|
||||
): Promise<void> {
|
||||
this._device = params.device;
|
||||
}
|
||||
|
||||
protected updated(changedProperties: PropertyValues): void {
|
||||
super.update(changedProperties);
|
||||
if (changedProperties.has("_device")) {
|
||||
this._fetchData();
|
||||
}
|
||||
}
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._device) {
|
||||
return html``;
|
||||
}
|
||||
|
||||
return html`
|
||||
<ha-dialog
|
||||
open
|
||||
hideActions
|
||||
@closing="${this._close}"
|
||||
.heading=${createCloseHeading(
|
||||
this.hass,
|
||||
this.hass.localize("ui.panel.config.zha.clusters.header")
|
||||
)}
|
||||
>
|
||||
<zha-clusters
|
||||
.hass=${this.hass}
|
||||
.selectedDevice="${this._device}"
|
||||
@zha-cluster-selected="${this._onClusterSelected}"
|
||||
></zha-clusters>
|
||||
${this._selectedCluster
|
||||
? html`
|
||||
<zha-cluster-attributes
|
||||
.hass=${this.hass}
|
||||
.selectedNode="${this._device}"
|
||||
.selectedCluster="${this._selectedCluster}"
|
||||
></zha-cluster-attributes>
|
||||
<zha-cluster-commands
|
||||
.hass=${this.hass}
|
||||
.selectedNode="${this._device}"
|
||||
.selectedCluster="${this._selectedCluster}"
|
||||
></zha-cluster-commands>
|
||||
`
|
||||
: ""}
|
||||
${this._bindableDevices.length > 0
|
||||
? html`
|
||||
<zha-device-binding-control
|
||||
.hass=${this.hass}
|
||||
.selectedDevice="${this._device}"
|
||||
.bindableDevices="${this._bindableDevices}"
|
||||
></zha-device-binding-control>
|
||||
`
|
||||
: ""}
|
||||
${this._device && this._groups.length > 0
|
||||
? html`
|
||||
<zha-group-binding-control
|
||||
.hass=${this.hass}
|
||||
.selectedDevice="${this._device}"
|
||||
.groups="${this._groups}"
|
||||
></zha-group-binding-control>
|
||||
`
|
||||
: ""}
|
||||
</ha-dialog>
|
||||
`;
|
||||
}
|
||||
|
||||
private _onClusterSelected(
|
||||
selectedClusterEvent: HASSDomEvent<ZHAClusterSelectedParams>
|
||||
): void {
|
||||
this._selectedCluster = selectedClusterEvent.detail.cluster;
|
||||
}
|
||||
|
||||
private _close(): void {
|
||||
this._device = undefined;
|
||||
}
|
||||
|
||||
private async _fetchData(): Promise<void> {
|
||||
if (this._device && this.hass) {
|
||||
this._bindableDevices =
|
||||
this._device && this._device.device_type !== "Coordinator"
|
||||
? (await fetchBindableDevices(this.hass, this._device.ieee)).sort(
|
||||
sortZHADevices
|
||||
)
|
||||
: [];
|
||||
this._groups = (await fetchGroups(this.hass!)).sort(sortZHAGroups);
|
||||
}
|
||||
}
|
||||
|
||||
static get styles(): CSSResult {
|
||||
return haStyleDialog;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
"dialog-zha-cluster": DialogZHACluster;
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -6,10 +6,10 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import "../../components/ha-code-editor";
|
||||
import { createCloseHeading } from "../../components/ha-dialog";
|
||||
import { haStyleDialog } from "../../resources/styles";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import "../../../../../components/ha-code-editor";
|
||||
import { createCloseHeading } from "../../../../../components/ha-dialog";
|
||||
import { haStyleDialog } from "../../../../../resources/styles";
|
||||
import { HomeAssistant } from "../../../../../types";
|
||||
import { ZHADeviceZigbeeInfoDialogParams } from "./show-dialog-zha-device-zigbee-info";
|
||||
|
||||
@customElement("dialog-zha-device-zigbee-info")
|
||||
@@ -0,0 +1,22 @@
|
||||
import { fireEvent } from "../../../../../common/dom/fire_event";
|
||||
import { ZHADevice } from "../../../../../data/zha";
|
||||
|
||||
export interface ZHAClusterDialogParams {
|
||||
device: ZHADevice;
|
||||
}
|
||||
|
||||
export const loadZHAClusterDialog = () =>
|
||||
import(
|
||||
/* webpackChunkName: "dialog-zha-device-zigbee-info" */ "./dialog-zha-cluster"
|
||||
);
|
||||
|
||||
export const showZHAClusterDialog = (
|
||||
element: HTMLElement,
|
||||
params: ZHAClusterDialogParams
|
||||
): void => {
|
||||
fireEvent(element, "show-dialog", {
|
||||
dialogTag: "dialog-zha-cluster",
|
||||
dialogImport: loadZHAClusterDialog,
|
||||
dialogParams: params,
|
||||
});
|
||||
};
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
import { fireEvent } from "../../common/dom/fire_event";
|
||||
import { ZHADevice } from "../../data/zha";
|
||||
import { fireEvent } from "../../../../../common/dom/fire_event";
|
||||
import { ZHADevice } from "../../../../../data/zha";
|
||||
|
||||
export interface ZHADeviceZigbeeInfoDialogParams {
|
||||
device: ZHADevice;
|
||||
@@ -64,9 +64,6 @@ export class ZHAClusters extends LitElement {
|
||||
return html`
|
||||
<ha-config-section .isWide="${this.isWide}">
|
||||
<div class="header" slot="header">
|
||||
<span>
|
||||
${this.hass!.localize("ui.panel.config.zha.clusters.header")}
|
||||
</span>
|
||||
<ha-icon-button
|
||||
class="toggle-help-icon"
|
||||
@click="${this._onHelpTap}"
|
||||
|
||||
@@ -38,6 +38,10 @@ class HaConfigZwave extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="iron-flex ha-style ha-form-style">
|
||||
app-toolbar {
|
||||
border-bottom: 1px solid var(--divider-color);
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
@@ -25,10 +25,6 @@ class DeveloperToolsRouter extends HassRouterPage {
|
||||
tag: "developer-tools-event",
|
||||
load: () => import("./event/developer-tools-event"),
|
||||
},
|
||||
mqtt: {
|
||||
tag: "developer-tools-mqtt",
|
||||
load: () => import("./mqtt/developer-tools-mqtt"),
|
||||
},
|
||||
service: {
|
||||
tag: "developer-tools-service",
|
||||
load: () => import("./service/developer-tools-service"),
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { isComponentLoaded } from "../../common/config/is_component_loaded";
|
||||
import scrollToTarget from "../../common/dom/scroll-to-target";
|
||||
import { navigate } from "../../common/navigate";
|
||||
import "../../components/ha-menu-button";
|
||||
@@ -72,15 +71,6 @@ class PanelDeveloperTools extends LitElement {
|
||||
"ui.panel.developer-tools.tabs.events.title"
|
||||
)}
|
||||
</paper-tab>
|
||||
${isComponentLoaded(this.hass, "mqtt")
|
||||
? html`
|
||||
<paper-tab page-name="mqtt">
|
||||
${this.hass.localize(
|
||||
"ui.panel.developer-tools.tabs.mqtt.title"
|
||||
)}
|
||||
</paper-tab>
|
||||
`
|
||||
: ""}
|
||||
</paper-tabs>
|
||||
</app-header>
|
||||
<developer-tools-router
|
||||
|
||||
@@ -1,215 +0,0 @@
|
||||
import "@polymer/app-layout/app-header-layout/app-header-layout";
|
||||
import "@polymer/app-layout/app-header/app-header";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import "@polymer/paper-dropdown-menu/paper-dropdown-menu";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "@vaadin/vaadin-date-picker/theme/material/vaadin-date-picker";
|
||||
import { formatDate } from "../../common/datetime/format_date";
|
||||
import { computeRTL } from "../../common/util/compute_rtl";
|
||||
import "../../components/ha-menu-button";
|
||||
import "../../components/state-history-charts";
|
||||
import "../../data/ha-state-history-data";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "../../resources/ha-date-picker-style";
|
||||
import "../../styles/polymer-ha-style";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
*/
|
||||
class HaPanelHistory extends LocalizeMixin(PolymerElement) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="iron-flex ha-style">
|
||||
.content {
|
||||
padding: 0 16px 16px;
|
||||
}
|
||||
|
||||
vaadin-date-picker {
|
||||
margin-right: 16px;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
paper-dropdown-menu {
|
||||
max-width: 100px;
|
||||
margin-right: 16px;
|
||||
margin-top: 5px;
|
||||
--paper-input-container-label-floating: {
|
||||
padding-bottom: 11px;
|
||||
}
|
||||
--paper-input-suffix: {
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
:host([rtl]) paper-dropdown-menu {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
|
||||
<ha-state-history-data
|
||||
hass="[[hass]]"
|
||||
filter-type="[[_filterType]]"
|
||||
start-time="[[_computeStartTime(_currentDate)]]"
|
||||
end-time="[[endTime]]"
|
||||
data="{{stateHistory}}"
|
||||
is-loading="{{isLoadingData}}"
|
||||
></ha-state-history-data>
|
||||
<app-header-layout has-scrolling-region>
|
||||
<app-header slot="header" fixed>
|
||||
<app-toolbar>
|
||||
<ha-menu-button
|
||||
hass="[[hass]]"
|
||||
narrow="[[narrow]]"
|
||||
></ha-menu-button>
|
||||
<div main-title>[[localize('panel.history')]]</div>
|
||||
</app-toolbar>
|
||||
</app-header>
|
||||
|
||||
<div class="flex content">
|
||||
<div class="flex layout horizontal wrap">
|
||||
<vaadin-date-picker
|
||||
id="picker"
|
||||
value="{{_currentDate}}"
|
||||
label="[[localize('ui.panel.history.showing_entries')]]"
|
||||
disabled="[[isLoadingData]]"
|
||||
required
|
||||
></vaadin-date-picker>
|
||||
|
||||
<paper-dropdown-menu
|
||||
label-float
|
||||
label="[[localize('ui.panel.history.period')]]"
|
||||
disabled="[[isLoadingData]]"
|
||||
>
|
||||
<paper-listbox
|
||||
slot="dropdown-content"
|
||||
selected="{{_periodIndex}}"
|
||||
>
|
||||
<paper-item
|
||||
>[[localize('ui.duration.day', 'count', 1)]]</paper-item
|
||||
>
|
||||
<paper-item
|
||||
>[[localize('ui.duration.day', 'count', 3)]]</paper-item
|
||||
>
|
||||
<paper-item
|
||||
>[[localize('ui.duration.week', 'count', 1)]]</paper-item
|
||||
>
|
||||
</paper-listbox>
|
||||
</paper-dropdown-menu>
|
||||
</div>
|
||||
<state-history-charts
|
||||
hass="[[hass]]"
|
||||
history-data="[[stateHistory]]"
|
||||
is-loading-data="[[isLoadingData]]"
|
||||
end-time="[[endTime]]"
|
||||
no-single
|
||||
>
|
||||
</state-history-charts>
|
||||
</div>
|
||||
</app-header-layout>
|
||||
`;
|
||||
}
|
||||
|
||||
static get properties() {
|
||||
return {
|
||||
hass: Object,
|
||||
narrow: Boolean,
|
||||
|
||||
stateHistory: {
|
||||
type: Object,
|
||||
value: null,
|
||||
},
|
||||
|
||||
_periodIndex: {
|
||||
type: Number,
|
||||
value: 0,
|
||||
},
|
||||
|
||||
isLoadingData: {
|
||||
type: Boolean,
|
||||
value: false,
|
||||
},
|
||||
|
||||
endTime: {
|
||||
type: Object,
|
||||
computed: "_computeEndTime(_currentDate, _periodIndex)",
|
||||
},
|
||||
|
||||
// ISO8601 formatted date string
|
||||
_currentDate: {
|
||||
type: String,
|
||||
value: function () {
|
||||
var value = new Date();
|
||||
var today = new Date(
|
||||
Date.UTC(value.getFullYear(), value.getMonth(), value.getDate())
|
||||
);
|
||||
return today.toISOString().split("T")[0];
|
||||
},
|
||||
},
|
||||
|
||||
_filterType: {
|
||||
type: String,
|
||||
value: "date",
|
||||
},
|
||||
|
||||
rtl: {
|
||||
type: Boolean,
|
||||
reflectToAttribute: true,
|
||||
computed: "_computeRTL(hass)",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
datepickerFocus() {
|
||||
this.datePicker.adjustPosition();
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
// We are unable to parse date because we use intl api to render date
|
||||
this.$.picker.set("i18n.parseDate", null);
|
||||
this.$.picker.set("i18n.formatDate", (date) =>
|
||||
formatDate(new Date(date.year, date.month, date.day), this.hass.language)
|
||||
);
|
||||
}
|
||||
|
||||
_computeStartTime(_currentDate) {
|
||||
if (!_currentDate) return undefined;
|
||||
var parts = _currentDate.split("-");
|
||||
parts[1] = parseInt(parts[1]) - 1;
|
||||
return new Date(parts[0], parts[1], parts[2]);
|
||||
}
|
||||
|
||||
_computeEndTime(_currentDate, periodIndex) {
|
||||
var startTime = this._computeStartTime(_currentDate);
|
||||
var endTime = new Date(startTime);
|
||||
endTime.setDate(startTime.getDate() + this._computeFilterDays(periodIndex));
|
||||
return endTime;
|
||||
}
|
||||
|
||||
_computeFilterDays(periodIndex) {
|
||||
switch (periodIndex) {
|
||||
case 1:
|
||||
return 3;
|
||||
case 2:
|
||||
return 7;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
_computeRTL(hass) {
|
||||
return computeRTL(hass);
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-panel-history", HaPanelHistory);
|
||||
@@ -0,0 +1,204 @@
|
||||
import "@polymer/app-layout/app-header-layout/app-header-layout";
|
||||
import "@polymer/app-layout/app-header/app-header";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import { computeRTL } from "../../common/util/compute_rtl";
|
||||
import "../../components/ha-menu-button";
|
||||
import "../../components/state-history-charts";
|
||||
import { LitElement, css, property, PropertyValues } from "lit-element";
|
||||
import { html } from "lit-html";
|
||||
import { haStyle } from "../../resources/styles";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import type { DateRangePickerRanges } from "../../components/ha-date-range-picker";
|
||||
import "../../components/ha-date-range-picker";
|
||||
import { fetchDate, computeHistory } from "../../data/history";
|
||||
import "@polymer/paper-spinner/paper-spinner";
|
||||
|
||||
class HaPanelHistory extends LitElement {
|
||||
@property() hass!: HomeAssistant;
|
||||
|
||||
@property({ reflect: true, type: Boolean }) narrow!: boolean;
|
||||
|
||||
@property() _startDate: Date;
|
||||
|
||||
@property() _endDate: Date;
|
||||
|
||||
@property() _entityId = "";
|
||||
|
||||
@property() _isLoading = false;
|
||||
|
||||
@property() _stateHistory?;
|
||||
|
||||
@property({ reflect: true, type: Boolean }) rtl = false;
|
||||
|
||||
@property() private _ranges?: DateRangePickerRanges;
|
||||
|
||||
public constructor() {
|
||||
super();
|
||||
|
||||
const start = new Date();
|
||||
start.setHours(start.getHours() - 2);
|
||||
start.setMinutes(0);
|
||||
start.setSeconds(0);
|
||||
this._startDate = start;
|
||||
|
||||
const end = new Date();
|
||||
end.setHours(end.getHours() + 1);
|
||||
end.setMinutes(0);
|
||||
end.setSeconds(0);
|
||||
this._endDate = end;
|
||||
}
|
||||
|
||||
protected render() {
|
||||
return html`
|
||||
<app-header-layout has-scrolling-region>
|
||||
<app-header slot="header" fixed>
|
||||
<app-toolbar>
|
||||
<ha-menu-button
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
></ha-menu-button>
|
||||
<div main-title>${this.hass.localize("panel.history")}</div>
|
||||
</app-toolbar>
|
||||
</app-header>
|
||||
|
||||
<div class="flex content">
|
||||
<div class="flex layout horizontal wrap">
|
||||
<ha-date-range-picker
|
||||
.hass=${this.hass}
|
||||
?disabled=${this._isLoading}
|
||||
.startDate=${this._startDate}
|
||||
.endDate=${this._endDate}
|
||||
.ranges=${this._ranges}
|
||||
@change=${this._dateRangeChanged}
|
||||
></ha-date-range-picker>
|
||||
</div>
|
||||
${this._isLoading
|
||||
? html`<paper-spinner
|
||||
active
|
||||
alt=${this.hass.localize("ui.common.loading")}
|
||||
></paper-spinner>`
|
||||
: html`
|
||||
<state-history-charts
|
||||
.hass=${this.hass}
|
||||
.historyData=${this._stateHistory}
|
||||
.endTime=${this._endDate}
|
||||
no-single
|
||||
>
|
||||
</state-history-charts>
|
||||
`}
|
||||
</div>
|
||||
</app-header-layout>
|
||||
`;
|
||||
}
|
||||
|
||||
protected firstUpdated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const todayEnd = new Date(today);
|
||||
todayEnd.setDate(todayEnd.getDate() + 1);
|
||||
todayEnd.setMilliseconds(todayEnd.getMilliseconds() - 1);
|
||||
|
||||
const todayCopy = new Date(today);
|
||||
|
||||
const yesterday = new Date(todayCopy.setDate(today.getDate() - 1));
|
||||
const yesterdayEnd = new Date(yesterday);
|
||||
yesterdayEnd.setDate(yesterdayEnd.getDate() + 1);
|
||||
yesterdayEnd.setMilliseconds(yesterdayEnd.getMilliseconds() - 1);
|
||||
|
||||
const thisWeekStart = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay())
|
||||
);
|
||||
const thisWeekEnd = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay() + 7)
|
||||
);
|
||||
thisWeekEnd.setMilliseconds(thisWeekEnd.getMilliseconds() - 1);
|
||||
|
||||
const lastWeekStart = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay() - 7)
|
||||
);
|
||||
const lastWeekEnd = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay())
|
||||
);
|
||||
lastWeekEnd.setMilliseconds(lastWeekEnd.getMilliseconds() - 1);
|
||||
|
||||
this._ranges = {
|
||||
[this.hass.localize("ui.panel.history.ranges.today")]: [today, todayEnd],
|
||||
[this.hass.localize("ui.panel.history.ranges.yesterday")]: [
|
||||
yesterday,
|
||||
yesterdayEnd,
|
||||
],
|
||||
[this.hass.localize("ui.panel.history.ranges.this_week")]: [
|
||||
thisWeekStart,
|
||||
thisWeekEnd,
|
||||
],
|
||||
[this.hass.localize("ui.panel.history.ranges.last_week")]: [
|
||||
lastWeekStart,
|
||||
lastWeekEnd,
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
if (
|
||||
changedProps.has("_startDate") ||
|
||||
changedProps.has("_endDate") ||
|
||||
changedProps.has("_entityId")
|
||||
) {
|
||||
this._getHistory();
|
||||
}
|
||||
|
||||
if (changedProps.has("hass")) {
|
||||
const oldHass = changedProps.get("hass") as HomeAssistant | undefined;
|
||||
if (!oldHass || oldHass.language !== this.hass.language) {
|
||||
this.rtl = computeRTL(this.hass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async _getHistory() {
|
||||
this._isLoading = true;
|
||||
const dateHistory = await fetchDate(
|
||||
this.hass,
|
||||
this._startDate,
|
||||
this._endDate
|
||||
);
|
||||
this._stateHistory = computeHistory(
|
||||
this.hass,
|
||||
dateHistory,
|
||||
this.hass.localize,
|
||||
this.hass.language
|
||||
);
|
||||
this._isLoading = false;
|
||||
}
|
||||
|
||||
private _dateRangeChanged(ev) {
|
||||
this._startDate = ev.detail.startDate;
|
||||
const endDate = ev.detail.endDate;
|
||||
if (endDate.getHours() === 0 && endDate.getMinutes() === 0) {
|
||||
endDate.setDate(endDate.getDate() + 1);
|
||||
endDate.setMilliseconds(endDate.getMilliseconds() - 1);
|
||||
}
|
||||
this._endDate = endDate;
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
.content {
|
||||
padding: 0 16px 16px;
|
||||
}
|
||||
paper-spinner {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-panel-history", HaPanelHistory);
|
||||
@@ -1,120 +0,0 @@
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
|
||||
const DATA_CACHE = {};
|
||||
const ALL_ENTITIES = "*";
|
||||
|
||||
class HaLogbookData extends PolymerElement {
|
||||
static get properties() {
|
||||
return {
|
||||
hass: {
|
||||
type: Object,
|
||||
observer: "hassChanged",
|
||||
},
|
||||
|
||||
filterDate: {
|
||||
type: String,
|
||||
observer: "filterDataChanged",
|
||||
},
|
||||
|
||||
filterPeriod: {
|
||||
type: Number,
|
||||
observer: "filterDataChanged",
|
||||
},
|
||||
|
||||
filterEntity: {
|
||||
type: String,
|
||||
observer: "filterDataChanged",
|
||||
},
|
||||
|
||||
isLoading: {
|
||||
type: Boolean,
|
||||
value: true,
|
||||
readOnly: true,
|
||||
notify: true,
|
||||
},
|
||||
|
||||
entries: {
|
||||
type: Object,
|
||||
value: null,
|
||||
readOnly: true,
|
||||
notify: true,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
hassChanged(newHass, oldHass) {
|
||||
if (!oldHass && this.filterDate) {
|
||||
this.updateData();
|
||||
}
|
||||
}
|
||||
|
||||
filterDataChanged(newValue, oldValue) {
|
||||
if (oldValue !== undefined) {
|
||||
this.updateData();
|
||||
}
|
||||
}
|
||||
|
||||
updateData() {
|
||||
if (!this.hass) return;
|
||||
|
||||
this._setIsLoading(true);
|
||||
|
||||
this.getData(this.filterDate, this.filterPeriod, this.filterEntity).then(
|
||||
(logbookEntries) => {
|
||||
this._setEntries(logbookEntries);
|
||||
this._setIsLoading(false);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
getData(date, period, entityId) {
|
||||
if (!entityId) entityId = ALL_ENTITIES;
|
||||
|
||||
if (!DATA_CACHE[period]) DATA_CACHE[period] = [];
|
||||
if (!DATA_CACHE[period][date]) DATA_CACHE[period][date] = [];
|
||||
|
||||
if (DATA_CACHE[period][date][entityId]) {
|
||||
return DATA_CACHE[period][date][entityId];
|
||||
}
|
||||
|
||||
if (entityId !== ALL_ENTITIES && DATA_CACHE[period][date][ALL_ENTITIES]) {
|
||||
return DATA_CACHE[period][date][ALL_ENTITIES].then(function (entities) {
|
||||
return entities.filter(function (entity) {
|
||||
return entity.entity_id === entityId;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
DATA_CACHE[period][date][entityId] = this._getFromServer(
|
||||
date,
|
||||
period,
|
||||
entityId
|
||||
);
|
||||
return DATA_CACHE[period][date][entityId];
|
||||
}
|
||||
|
||||
_getFromServer(date, period, entityId) {
|
||||
let url = "logbook/" + date + "?period=" + period;
|
||||
if (entityId !== ALL_ENTITIES) {
|
||||
url += "&entity=" + entityId;
|
||||
}
|
||||
|
||||
return this.hass.callApi("GET", url).then(
|
||||
function (logbookEntries) {
|
||||
logbookEntries.reverse();
|
||||
return logbookEntries;
|
||||
},
|
||||
function () {
|
||||
return null;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
refreshLogbook() {
|
||||
DATA_CACHE[this.filterPeriod][this.filterDate] = [];
|
||||
this.updateData();
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-logbook-data", HaLogbookData);
|
||||
@@ -1,283 +0,0 @@
|
||||
import "@polymer/app-layout/app-header-layout/app-header-layout";
|
||||
import "@polymer/app-layout/app-header/app-header";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import "../../components/ha-icon-button";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import "@polymer/paper-spinner/paper-spinner";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "@vaadin/vaadin-date-picker/theme/material/vaadin-date-picker";
|
||||
import { formatDate } from "../../common/datetime/format_date";
|
||||
import { computeRTL } from "../../common/util/compute_rtl";
|
||||
import "../../components/entity/ha-entity-picker";
|
||||
import "../../components/ha-menu-button";
|
||||
import LocalizeMixin from "../../mixins/localize-mixin";
|
||||
import "../../resources/ha-date-picker-style";
|
||||
import "../../styles/polymer-ha-style";
|
||||
import "./ha-logbook";
|
||||
import "./ha-logbook-data";
|
||||
|
||||
/*
|
||||
* @appliesMixin LocalizeMixin
|
||||
*/
|
||||
class HaPanelLogbook extends LocalizeMixin(PolymerElement) {
|
||||
static get template() {
|
||||
return html`
|
||||
<style include="ha-style">
|
||||
ha-logbook {
|
||||
height: calc(100vh - 136px);
|
||||
}
|
||||
|
||||
:host([narrow]) ha-logbook {
|
||||
height: calc(100vh - 198px);
|
||||
}
|
||||
|
||||
paper-spinner {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.wrap {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.filters {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
:host([narrow]) .filters {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
vaadin-date-picker {
|
||||
max-width: 200px;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
:host([rtl]) vaadin-date-picker {
|
||||
margin-right: 0;
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
paper-dropdown-menu {
|
||||
max-width: 100px;
|
||||
margin-right: 16px;
|
||||
--paper-input-container-label-floating: {
|
||||
padding-bottom: 11px;
|
||||
}
|
||||
--paper-input-suffix: {
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
:host([rtl]) paper-dropdown-menu {
|
||||
text-align: right;
|
||||
margin-right: 0;
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
paper-item {
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
ha-entity-picker {
|
||||
display: inline-block;
|
||||
flex-grow: 1;
|
||||
max-width: 400px;
|
||||
--paper-input-suffix: {
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
:host([narrow]) ha-entity-picker {
|
||||
max-width: none;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<ha-logbook-data
|
||||
hass="[[hass]]"
|
||||
is-loading="{{isLoading}}"
|
||||
entries="{{entries}}"
|
||||
filter-date="[[_computeFilterDate(_currentDate)]]"
|
||||
filter-period="[[_computeFilterDays(_periodIndex)]]"
|
||||
filter-entity="[[entityId]]"
|
||||
></ha-logbook-data>
|
||||
|
||||
<app-header-layout has-scrolling-region>
|
||||
<app-header slot="header" fixed>
|
||||
<app-toolbar>
|
||||
<ha-menu-button
|
||||
hass="[[hass]]"
|
||||
narrow="[[narrow]]"
|
||||
></ha-menu-button>
|
||||
<div main-title>[[localize('panel.logbook')]]</div>
|
||||
<ha-icon-button
|
||||
icon="hass:refresh"
|
||||
on-click="refreshLogbook"
|
||||
hidden$="[[isLoading]]"
|
||||
></ha-icon-button>
|
||||
</app-toolbar>
|
||||
</app-header>
|
||||
|
||||
<paper-spinner
|
||||
active="[[isLoading]]"
|
||||
hidden$="[[!isLoading]]"
|
||||
alt="[[localize('ui.common.loading')]]"
|
||||
></paper-spinner>
|
||||
|
||||
<div class="filters">
|
||||
<vaadin-date-picker
|
||||
id="picker"
|
||||
value="{{_currentDate}}"
|
||||
label="[[localize('ui.panel.logbook.showing_entries')]]"
|
||||
disabled="[[isLoading]]"
|
||||
required
|
||||
></vaadin-date-picker>
|
||||
|
||||
<paper-dropdown-menu
|
||||
label-float
|
||||
label="[[localize('ui.panel.logbook.period')]]"
|
||||
disabled="[[isLoading]]"
|
||||
>
|
||||
<paper-listbox slot="dropdown-content" selected="{{_periodIndex}}">
|
||||
<paper-item
|
||||
>[[localize('ui.duration.day', 'count', 1)]]</paper-item
|
||||
>
|
||||
<paper-item
|
||||
>[[localize('ui.duration.day', 'count', 3)]]</paper-item
|
||||
>
|
||||
<paper-item
|
||||
>[[localize('ui.duration.week', 'count', 1)]]</paper-item
|
||||
>
|
||||
</paper-listbox>
|
||||
</paper-dropdown-menu>
|
||||
|
||||
<ha-entity-picker
|
||||
hass="[[hass]]"
|
||||
value="{{_entityId}}"
|
||||
label="[[localize('ui.components.entity.entity-picker.entity')]]"
|
||||
disabled="[[isLoading]]"
|
||||
on-change="_entityPicked"
|
||||
></ha-entity-picker>
|
||||
</div>
|
||||
|
||||
<ha-logbook
|
||||
hass="[[hass]]"
|
||||
entries="[[entries]]"
|
||||
hidden$="[[isLoading]]"
|
||||
></ha-logbook>
|
||||
</app-header-layout>
|
||||
`;
|
||||
}
|
||||
|
||||
static get properties() {
|
||||
return {
|
||||
hass: Object,
|
||||
|
||||
narrow: { type: Boolean, reflectToAttribute: true },
|
||||
|
||||
// ISO8601 formatted date string
|
||||
_currentDate: {
|
||||
type: String,
|
||||
value: function () {
|
||||
const value = new Date();
|
||||
const today = new Date(
|
||||
Date.UTC(value.getFullYear(), value.getMonth(), value.getDate())
|
||||
);
|
||||
return today.toISOString().split("T")[0];
|
||||
},
|
||||
},
|
||||
|
||||
_periodIndex: {
|
||||
type: Number,
|
||||
value: 0,
|
||||
},
|
||||
|
||||
_entityId: {
|
||||
type: String,
|
||||
value: "",
|
||||
},
|
||||
|
||||
entityId: {
|
||||
type: String,
|
||||
value: "",
|
||||
readOnly: true,
|
||||
},
|
||||
|
||||
isLoading: {
|
||||
type: Boolean,
|
||||
},
|
||||
|
||||
entries: {
|
||||
type: Array,
|
||||
},
|
||||
|
||||
datePicker: {
|
||||
type: Object,
|
||||
},
|
||||
|
||||
rtl: {
|
||||
type: Boolean,
|
||||
reflectToAttribute: true,
|
||||
computed: "_computeRTL(hass)",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
ready() {
|
||||
super.ready();
|
||||
this.hass.loadBackendTranslation("title");
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
// We are unable to parse date because we use intl api to render date
|
||||
this.$.picker.set("i18n.parseDate", null);
|
||||
this.$.picker.set("i18n.formatDate", (date) =>
|
||||
formatDate(new Date(date.year, date.month, date.day), this.hass.language)
|
||||
);
|
||||
}
|
||||
|
||||
_computeFilterDate(_currentDate) {
|
||||
if (!_currentDate) return undefined;
|
||||
var parts = _currentDate.split("-");
|
||||
parts[1] = parseInt(parts[1]) - 1;
|
||||
return new Date(parts[0], parts[1], parts[2]).toISOString();
|
||||
}
|
||||
|
||||
_computeFilterDays(periodIndex) {
|
||||
switch (periodIndex) {
|
||||
case 1:
|
||||
return 3;
|
||||
case 2:
|
||||
return 7;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
_entityPicked(ev) {
|
||||
this._setEntityId(ev.target.value);
|
||||
}
|
||||
|
||||
refreshLogbook() {
|
||||
this.shadowRoot.querySelector("ha-logbook-data").refreshLogbook();
|
||||
}
|
||||
|
||||
_computeRTL(hass) {
|
||||
return computeRTL(hass);
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("ha-panel-logbook", HaPanelLogbook);
|
||||
@@ -0,0 +1,279 @@
|
||||
import "@polymer/app-layout/app-header-layout/app-header-layout";
|
||||
import "@polymer/app-layout/app-header/app-header";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import "../../components/ha-icon-button";
|
||||
import "@polymer/paper-spinner/paper-spinner";
|
||||
import { computeRTL } from "../../common/util/compute_rtl";
|
||||
import "../../components/entity/ha-entity-picker";
|
||||
import "../../components/ha-menu-button";
|
||||
import "./ha-logbook";
|
||||
import {
|
||||
LitElement,
|
||||
property,
|
||||
customElement,
|
||||
html,
|
||||
css,
|
||||
PropertyValues,
|
||||
} from "lit-element";
|
||||
import { HomeAssistant } from "../../types";
|
||||
import { haStyle } from "../../resources/styles";
|
||||
import {
|
||||
clearLogbookCache,
|
||||
getLogbookData,
|
||||
LogbookEntry,
|
||||
} from "../../data/logbook";
|
||||
import { mdiRefresh } from "@mdi/js";
|
||||
import "../../components/ha-date-range-picker";
|
||||
import type { DateRangePickerRanges } from "../../components/ha-date-range-picker";
|
||||
|
||||
@customElement("ha-panel-logbook")
|
||||
export class HaPanelLogbook extends LitElement {
|
||||
@property() hass!: HomeAssistant;
|
||||
|
||||
@property({ reflect: true, type: Boolean }) narrow!: boolean;
|
||||
|
||||
@property() _startDate: Date;
|
||||
|
||||
@property() _endDate: Date;
|
||||
|
||||
@property() _entityId = "";
|
||||
|
||||
@property() _isLoading = false;
|
||||
|
||||
@property() _entries: LogbookEntry[] = [];
|
||||
|
||||
@property({ reflect: true, type: Boolean }) rtl = false;
|
||||
|
||||
@property() private _ranges?: DateRangePickerRanges;
|
||||
|
||||
public constructor() {
|
||||
super();
|
||||
|
||||
const start = new Date();
|
||||
start.setHours(start.getHours() - 2);
|
||||
start.setMinutes(0);
|
||||
start.setSeconds(0);
|
||||
this._startDate = start;
|
||||
|
||||
const end = new Date();
|
||||
end.setHours(end.getHours() + 1);
|
||||
end.setMinutes(0);
|
||||
end.setSeconds(0);
|
||||
this._endDate = end;
|
||||
}
|
||||
|
||||
protected render() {
|
||||
return html`
|
||||
<app-header-layout has-scrolling-region>
|
||||
<app-header slot="header" fixed>
|
||||
<app-toolbar>
|
||||
<ha-menu-button
|
||||
.hass=${this.hass}
|
||||
.narrow=${this.narrow}
|
||||
></ha-menu-button>
|
||||
<div main-title>${this.hass.localize("panel.logbook")}</div>
|
||||
<mwc-icon-button
|
||||
@click=${this._refreshLogbook}
|
||||
.disabled=${this._isLoading}
|
||||
>
|
||||
<ha-svg-icon path=${mdiRefresh}></ha-svg-icon>
|
||||
</mwc-icon-button>
|
||||
</app-toolbar>
|
||||
</app-header>
|
||||
|
||||
${this._isLoading ? html`` : ""}
|
||||
|
||||
<div class="filters">
|
||||
<ha-date-range-picker
|
||||
.hass=${this.hass}
|
||||
?disabled=${this._isLoading}
|
||||
.startDate=${this._startDate}
|
||||
.endDate=${this._endDate}
|
||||
.ranges=${this._ranges}
|
||||
@change=${this._dateRangeChanged}
|
||||
></ha-date-range-picker>
|
||||
|
||||
<ha-entity-picker
|
||||
.hass=${this.hass}
|
||||
.value=${this._entityId}
|
||||
.label=${this.hass.localize(
|
||||
"ui.components.entity.entity-picker.entity"
|
||||
)}
|
||||
.disabled=${this._isLoading}
|
||||
@change=${this._entityPicked}
|
||||
></ha-entity-picker>
|
||||
</div>
|
||||
|
||||
${this._isLoading
|
||||
? html`<paper-spinner
|
||||
active
|
||||
alt=${this.hass.localize("ui.common.loading")}
|
||||
></paper-spinner>`
|
||||
: html`<ha-logbook
|
||||
.hass=${this.hass}
|
||||
.entries=${this._entries}
|
||||
></ha-logbook>`}
|
||||
</app-header-layout>
|
||||
`;
|
||||
}
|
||||
|
||||
protected firstUpdated(changedProps: PropertyValues) {
|
||||
super.firstUpdated(changedProps);
|
||||
this.hass.loadBackendTranslation("title");
|
||||
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const todayEnd = new Date(today);
|
||||
todayEnd.setDate(todayEnd.getDate() + 1);
|
||||
todayEnd.setMilliseconds(todayEnd.getMilliseconds() - 1);
|
||||
|
||||
const todayCopy = new Date(today);
|
||||
|
||||
const yesterday = new Date(todayCopy.setDate(today.getDate() - 1));
|
||||
const yesterdayEnd = new Date(yesterday);
|
||||
yesterdayEnd.setDate(yesterdayEnd.getDate() + 1);
|
||||
yesterdayEnd.setMilliseconds(yesterdayEnd.getMilliseconds() - 1);
|
||||
|
||||
const thisWeekStart = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay())
|
||||
);
|
||||
const thisWeekEnd = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay() + 7)
|
||||
);
|
||||
thisWeekEnd.setMilliseconds(thisWeekEnd.getMilliseconds() - 1);
|
||||
|
||||
const lastWeekStart = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay() - 7)
|
||||
);
|
||||
const lastWeekEnd = new Date(
|
||||
todayCopy.setDate(today.getDate() - today.getDay())
|
||||
);
|
||||
lastWeekEnd.setMilliseconds(lastWeekEnd.getMilliseconds() - 1);
|
||||
|
||||
this._ranges = {
|
||||
[this.hass.localize("ui.panel.logbook.ranges.today")]: [today, todayEnd],
|
||||
[this.hass.localize("ui.panel.logbook.ranges.yesterday")]: [
|
||||
yesterday,
|
||||
yesterdayEnd,
|
||||
],
|
||||
[this.hass.localize("ui.panel.logbook.ranges.this_week")]: [
|
||||
thisWeekStart,
|
||||
thisWeekEnd,
|
||||
],
|
||||
[this.hass.localize("ui.panel.logbook.ranges.last_week")]: [
|
||||
lastWeekStart,
|
||||
lastWeekEnd,
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
protected updated(changedProps: PropertyValues) {
|
||||
if (
|
||||
changedProps.has("_startDate") ||
|
||||
changedProps.has("_endDate") ||
|
||||
changedProps.has("_entityId")
|
||||
) {
|
||||
this._getData();
|
||||
}
|
||||
|
||||
if (changedProps.has("hass")) {
|
||||
const oldHass = changedProps.get("hass") as HomeAssistant | undefined;
|
||||
if (!oldHass || oldHass.language !== this.hass.language) {
|
||||
this.rtl = computeRTL(this.hass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private _dateRangeChanged(ev) {
|
||||
this._startDate = ev.detail.startDate;
|
||||
const endDate = ev.detail.endDate;
|
||||
if (endDate.getHours() === 0 && endDate.getMinutes() === 0) {
|
||||
endDate.setDate(endDate.getDate() + 1);
|
||||
endDate.setMilliseconds(endDate.getMilliseconds() - 1);
|
||||
}
|
||||
this._endDate = endDate;
|
||||
}
|
||||
|
||||
private _entityPicked(ev) {
|
||||
this._entityId = ev.target.value;
|
||||
}
|
||||
|
||||
private _refreshLogbook() {
|
||||
this._entries = [];
|
||||
clearLogbookCache(
|
||||
this._startDate.toISOString(),
|
||||
this._endDate.toISOString()
|
||||
);
|
||||
this._getData();
|
||||
}
|
||||
|
||||
private async _getData() {
|
||||
this._isLoading = true;
|
||||
this._entries = await getLogbookData(
|
||||
this.hass,
|
||||
this._startDate.toISOString(),
|
||||
this._endDate.toISOString(),
|
||||
this._entityId
|
||||
);
|
||||
this._isLoading = false;
|
||||
}
|
||||
|
||||
static get styles() {
|
||||
return [
|
||||
haStyle,
|
||||
css`
|
||||
ha-logbook {
|
||||
height: calc(100vh - 136px);
|
||||
}
|
||||
|
||||
:host([narrow]) ha-logbook {
|
||||
height: calc(100vh - 198px);
|
||||
}
|
||||
|
||||
ha-date-range-picker {
|
||||
margin-right: 16px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
:host([narrow]) ha-date-range-picker {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
paper-spinner {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.wrap {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.filters {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
:host([narrow]) .filters {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
ha-entity-picker {
|
||||
display: inline-block;
|
||||
flex-grow: 1;
|
||||
max-width: 400px;
|
||||
--paper-input-suffix: {
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
:host([narrow]) ha-entity-picker {
|
||||
max-width: none;
|
||||
width: 100%;
|
||||
}
|
||||
`,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -228,6 +228,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
overflow: hidden;
|
||||
}
|
||||
.card-header {
|
||||
display: flex;
|
||||
|
||||
@@ -12,7 +12,6 @@ import { classMap } from "lit-html/directives/class-map";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/state-history-charts";
|
||||
import { CacheConfig, getRecentWithCache } from "../../../data/cached-history";
|
||||
import "../../../data/ha-state-history-data";
|
||||
import { HomeAssistant } from "../../../types";
|
||||
import { findEntities } from "../common/find-entites";
|
||||
import { processConfigEntities } from "../common/process-config-entities";
|
||||
|
||||
@@ -14,6 +14,7 @@ import "../cards/hui-weather-forecast-card";
|
||||
import {
|
||||
createLovelaceElement,
|
||||
getLovelaceElementClass,
|
||||
tryCreateLovelaceElement,
|
||||
} from "./create-element-base";
|
||||
|
||||
const ALWAYS_LOADED_TYPES = new Set([
|
||||
@@ -52,6 +53,17 @@ const LAZY_LOAD_TYPES = {
|
||||
picture: () => import("../cards/hui-picture-card"),
|
||||
};
|
||||
|
||||
// This will not return an error card but will throw the error
|
||||
export const tryCreateCardElement = (config: LovelaceCardConfig) =>
|
||||
tryCreateLovelaceElement(
|
||||
"card",
|
||||
config,
|
||||
ALWAYS_LOADED_TYPES,
|
||||
LAZY_LOAD_TYPES,
|
||||
undefined,
|
||||
undefined
|
||||
);
|
||||
|
||||
export const createCardElement = (config: LovelaceCardConfig) =>
|
||||
createLovelaceElement(
|
||||
"card",
|
||||
|
||||
@@ -73,15 +73,8 @@ const _createElement = <T extends keyof CreateElementConfigTypes>(
|
||||
const element = document.createElement(
|
||||
tag
|
||||
) as CreateElementConfigTypes[T]["element"];
|
||||
try {
|
||||
// @ts-ignore
|
||||
element.setConfig(config);
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line
|
||||
console.error(tag, err);
|
||||
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||
return _createErrorElement(err.message, config);
|
||||
}
|
||||
// @ts-ignore
|
||||
element.setConfig(config);
|
||||
return element;
|
||||
};
|
||||
|
||||
@@ -152,9 +145,37 @@ export const createLovelaceElement = <T extends keyof CreateElementConfigTypes>(
|
||||
domainTypes?: { _domain_not_found: string; [domain: string]: string },
|
||||
// Default type if no type given. If given, entity types will not work.
|
||||
defaultType?: string
|
||||
): CreateElementConfigTypes[T]["element"] | HuiErrorCard => {
|
||||
try {
|
||||
return tryCreateLovelaceElement(
|
||||
tagSuffix,
|
||||
config,
|
||||
alwaysLoadTypes,
|
||||
lazyLoadTypes,
|
||||
domainTypes,
|
||||
defaultType
|
||||
);
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line
|
||||
console.error(tagSuffix, config.type, err);
|
||||
return _createErrorElement(err.message, config);
|
||||
}
|
||||
};
|
||||
|
||||
export const tryCreateLovelaceElement = <
|
||||
T extends keyof CreateElementConfigTypes
|
||||
>(
|
||||
tagSuffix: T,
|
||||
config: CreateElementConfigTypes[T]["config"],
|
||||
alwaysLoadTypes?: Set<string>,
|
||||
lazyLoadTypes?: { [domain: string]: () => Promise<unknown> },
|
||||
// Allow looking at "entity" in config and mapping that to a type
|
||||
domainTypes?: { _domain_not_found: string; [domain: string]: string },
|
||||
// Default type if no type given. If given, entity types will not work.
|
||||
defaultType?: string
|
||||
): CreateElementConfigTypes[T]["element"] | HuiErrorCard => {
|
||||
if (!config || typeof config !== "object") {
|
||||
return _createErrorElement("Config is not an object", config);
|
||||
throw new Error("Config is not an object");
|
||||
}
|
||||
|
||||
if (
|
||||
@@ -163,7 +184,7 @@ export const createLovelaceElement = <T extends keyof CreateElementConfigTypes>(
|
||||
// If domain types is given, we can derive a type from "entity"
|
||||
(!domainTypes || !("entity" in config))
|
||||
) {
|
||||
return _createErrorElement("No card type configured.", config);
|
||||
throw new Error("No card type configured.");
|
||||
}
|
||||
|
||||
const customTag = config.type ? _getCustomTag(config.type) : undefined;
|
||||
@@ -185,7 +206,7 @@ export const createLovelaceElement = <T extends keyof CreateElementConfigTypes>(
|
||||
}
|
||||
|
||||
if (type === undefined) {
|
||||
return _createErrorElement(`No type specified`, config);
|
||||
throw new Error("No type specified.");
|
||||
}
|
||||
|
||||
const tag = `hui-${type}-${tagSuffix}`;
|
||||
@@ -199,7 +220,7 @@ export const createLovelaceElement = <T extends keyof CreateElementConfigTypes>(
|
||||
return _createElement(tag, config);
|
||||
}
|
||||
|
||||
return _createErrorElement(`Unknown type encountered: ${type}.`, config);
|
||||
throw new Error(`Unknown type encountered: ${type}`);
|
||||
};
|
||||
|
||||
export const getLovelaceElementClass = async <
|
||||
|
||||
@@ -27,7 +27,7 @@ import {
|
||||
calcUnusedEntities,
|
||||
computeUsedEntities,
|
||||
} from "../../common/compute-unused-entities";
|
||||
import { createCardElement } from "../../create-element/create-card-element";
|
||||
import { tryCreateCardElement } from "../../create-element/create-card-element";
|
||||
import { LovelaceCard } from "../../types";
|
||||
import { getCardStubConfig } from "../get-card-stub-config";
|
||||
import { CardPickTarget, Card } from "../types";
|
||||
@@ -307,8 +307,8 @@ export class HuiCardPicker extends LitElement {
|
||||
fireEvent(this, "config-changed", { config });
|
||||
}
|
||||
|
||||
private _createCardElement(cardConfig: LovelaceCardConfig) {
|
||||
const element = createCardElement(cardConfig) as LovelaceCard;
|
||||
private _tryCreateCardElement(cardConfig: LovelaceCardConfig) {
|
||||
const element = tryCreateCardElement(cardConfig) as LovelaceCard;
|
||||
element.hass = this.hass;
|
||||
element.addEventListener(
|
||||
"ll-rebuild",
|
||||
@@ -325,7 +325,12 @@ export class HuiCardPicker extends LitElement {
|
||||
cardElToReplace: LovelaceCard,
|
||||
config: LovelaceCardConfig
|
||||
): void {
|
||||
const newCardEl = this._createCardElement(config);
|
||||
let newCardEl: LovelaceCard;
|
||||
try {
|
||||
newCardEl = this._tryCreateCardElement(config);
|
||||
} catch (err) {
|
||||
return;
|
||||
}
|
||||
if (cardElToReplace.parentElement) {
|
||||
cardElToReplace.parentElement!.replaceChild(newCardEl, cardElToReplace);
|
||||
}
|
||||
@@ -351,7 +356,11 @@ export class HuiCardPicker extends LitElement {
|
||||
);
|
||||
|
||||
if (showElement) {
|
||||
element = this._createCardElement(cardConfig);
|
||||
try {
|
||||
element = this._tryCreateCardElement(cardConfig);
|
||||
} catch (err) {
|
||||
element = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+33
-18
@@ -278,6 +278,11 @@
|
||||
"failed_create_area": "Failed to create area."
|
||||
}
|
||||
},
|
||||
"date-range-picker": {
|
||||
"start_date": "Start date",
|
||||
"end_date": "End date",
|
||||
"select": "Select"
|
||||
},
|
||||
"relative_time": {
|
||||
"past": "{time} ago",
|
||||
"future": "In {time}",
|
||||
@@ -443,6 +448,7 @@
|
||||
"buttons": {
|
||||
"add": "Add Devices via this device",
|
||||
"remove": "Remove Device",
|
||||
"clusters": "Manage Clusters",
|
||||
"reconfigure": "Reconfigure Device",
|
||||
"zigbee_information": "Zigbee device signature"
|
||||
},
|
||||
@@ -1506,6 +1512,20 @@
|
||||
"create": "Create"
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"button": "Configure",
|
||||
"title": "MQTT",
|
||||
"description_publish": "Publish a packet",
|
||||
"topic": "topic",
|
||||
"payload": "Payload (template allowed)",
|
||||
"publish": "Publish",
|
||||
"description_listen": "Listen to a topic",
|
||||
"listening_to": "Listening to",
|
||||
"subscribe_to": "Topic to subscribe to",
|
||||
"start_listening": "Start listening",
|
||||
"stop_listening": "Stop listening",
|
||||
"message_received": "Message {id} received on {topic} at {time}:"
|
||||
},
|
||||
"zha": {
|
||||
"button": "Configure",
|
||||
"header": "Configure Zigbee Home Automation",
|
||||
@@ -1694,13 +1714,21 @@
|
||||
}
|
||||
},
|
||||
"history": {
|
||||
"showing_entries": "Showing entries for",
|
||||
"period": "Period"
|
||||
"ranges": {
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday",
|
||||
"this_week": "This week",
|
||||
"last_week": "Last week"
|
||||
}
|
||||
},
|
||||
"logbook": {
|
||||
"showing_entries": "[%key:ui::panel::history::showing_entries%]",
|
||||
"period": "Period",
|
||||
"entries_not_found": "No logbook entries found."
|
||||
"entries_not_found": "No logbook entries found.",
|
||||
"ranges": {
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday",
|
||||
"this_week": "This week",
|
||||
"last_week": "Last week"
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
"cards": {
|
||||
@@ -2299,19 +2327,6 @@
|
||||
"alert_event_type": "Event type is a mandatory field",
|
||||
"notification_event_fired": "Event {type} successful fired!"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT",
|
||||
"description_publish": "Publish a packet",
|
||||
"topic": "topic",
|
||||
"payload": "Payload (template allowed)",
|
||||
"publish": "Publish",
|
||||
"description_listen": "Listen to a topic",
|
||||
"listening_to": "Listening to",
|
||||
"subscribe_to": "Topic to subscribe to",
|
||||
"start_listening": "Start listening",
|
||||
"stop_listening": "Stop listening",
|
||||
"message_received": "Message {id} received on {topic} at {time}:"
|
||||
},
|
||||
"services": {
|
||||
"title": "Services",
|
||||
"description": "The service dev tool allows you to call any available service in Home Assistant.",
|
||||
|
||||
@@ -1142,6 +1142,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Persone",
|
||||
"description": "Bestuur die persone wat Home Assistant op spoor.",
|
||||
@@ -1377,9 +1380,6 @@
|
||||
"events": {
|
||||
"title": "Gebeure"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Dienste"
|
||||
},
|
||||
|
||||
@@ -920,6 +920,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"detail": {
|
||||
"device_tracker_pick": "اختر جهاز لتتبع"
|
||||
@@ -1045,9 +1048,6 @@
|
||||
"events": {
|
||||
"title": "أحداث"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "الخدمات"
|
||||
},
|
||||
|
||||
@@ -939,6 +939,9 @@
|
||||
"cant_edit_yaml": "Използвате Lovelace в YAML режим, следователно не можете да управлявате ресурсите си чрез потребителския интерфейс. Управлявайте ги в configuration.yaml."
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Хора",
|
||||
"description": "Управлявайте хората, които следите от Home Assistant.",
|
||||
@@ -1092,9 +1095,6 @@
|
||||
"events": {
|
||||
"title": "Събития"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Услуги"
|
||||
},
|
||||
|
||||
@@ -240,9 +240,23 @@
|
||||
},
|
||||
"panel": {
|
||||
"config": {
|
||||
"automation": {
|
||||
"editor": {
|
||||
"triggers": {
|
||||
"type": {
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cloud": {
|
||||
"caption": "Home Assistant Cloud"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"zwave": {
|
||||
"caption": "Z-Wave",
|
||||
"node_config": {
|
||||
@@ -255,9 +269,6 @@
|
||||
"events": {
|
||||
"title": "Događanja"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Usluge"
|
||||
},
|
||||
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "El component Estat del Sistema no està configurat. Afegeix 'system_health:' a configuration.yaml",
|
||||
"title": "Informació"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "pàgina d'integracions",
|
||||
"missing_zha": "Trobes a faltar el panell de configuració de ZHA? S'ha traslladat a l'entrada ZHA de la {integrations_page}.",
|
||||
"missing_zwave": "Trobes a faltar el panell de configuració de Z-Wave? S'ha traslladat a l'entrada Z-Wave de la {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Afegeix integració",
|
||||
"caption": "Integracions",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Escolta d'un tòpic",
|
||||
"description_publish": "Publicació d'un paquet",
|
||||
"listening_to": "Escoltant a",
|
||||
"message_received": "Missatge {id} rebut a {topic} a les {time}:",
|
||||
"payload": "Dades/missatge (plantilla permesa)",
|
||||
"publish": "Publica",
|
||||
"start_listening": "Comença a escoltar",
|
||||
"stop_listening": "Deixa d'escoltar",
|
||||
"subscribe_to": "Tòpic al qual subscriure's",
|
||||
"title": "MQTT",
|
||||
"topic": "tòpic"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Afegeix persona",
|
||||
"caption": "Persones",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "Esdeveniments",
|
||||
"type": "Tipus d'esdeveniment"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Escolta d'un tòpic",
|
||||
"description_publish": "Publicació d'un paquet",
|
||||
"listening_to": "Escoltant a",
|
||||
"message_received": "Missatge {id} rebut a {topic} a les {time}:",
|
||||
"payload": "Dades/missatge (plantilla permesa)",
|
||||
"publish": "Publica",
|
||||
"start_listening": "Comença a escoltar",
|
||||
"stop_listening": "Deixa d'escoltar",
|
||||
"subscribe_to": "Tòpic al qual subscriure's",
|
||||
"title": "MQTT",
|
||||
"topic": "tòpic"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "S'ha produït un error analitzant el codi YAML: {data}",
|
||||
"call_service": "Crida servei",
|
||||
|
||||
@@ -1541,6 +1541,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Naslouchat tématu",
|
||||
"description_publish": "Publikovat paket",
|
||||
"listening_to": "Naslouchám",
|
||||
"message_received": "Zpráva {id} přijata na {topic} v {time} :",
|
||||
"payload": "Obsah",
|
||||
"publish": "Publikovat",
|
||||
"start_listening": "Začít naslouchat",
|
||||
"stop_listening": "Přestat naslouchat",
|
||||
"subscribe_to": "Téma k odběru",
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Přidat osobu",
|
||||
"caption": "Osoby",
|
||||
@@ -1947,19 +1960,6 @@
|
||||
"title": "Události",
|
||||
"type": "Typ události"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Naslouchat tématu",
|
||||
"description_publish": "Publikovat paket",
|
||||
"listening_to": "Naslouchám",
|
||||
"message_received": "Zpráva {id} přijata na {topic} v {time} :",
|
||||
"payload": "Obsah",
|
||||
"publish": "Publikovat",
|
||||
"start_listening": "Začít naslouchat",
|
||||
"stop_listening": "Přestat naslouchat",
|
||||
"subscribe_to": "Téma k odběru",
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Chyba při parsování YAML: {data}",
|
||||
"call_service": "Zavolat službu",
|
||||
|
||||
@@ -780,6 +780,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Pobl",
|
||||
"description": "Rheoli'r pobl mae Home Assistant yn tracio.",
|
||||
@@ -935,9 +938,6 @@
|
||||
"events": {
|
||||
"title": "Digwyddiadau"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Gwasanaethau"
|
||||
},
|
||||
|
||||
@@ -1373,7 +1373,9 @@
|
||||
},
|
||||
"info": {
|
||||
"built_using": "Bygget ved hjælp af",
|
||||
"caption": "Oplysninger",
|
||||
"custom_uis": "Tilpassede brugergrænseflader:",
|
||||
"description": "Oplysninger om din Home Assistant-installation",
|
||||
"developed_by": "Udviklet af en masse fantastiske mennesker.",
|
||||
"documentation": "Dokumentation",
|
||||
"frontend": "brugerflade",
|
||||
@@ -1389,6 +1391,11 @@
|
||||
"system_health_error": "System Health-komponenten er ikke indlæst. Føj 'system_health:' til 'config.yaml'",
|
||||
"title": "Info"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "integrationssiden",
|
||||
"missing_zha": "Mangler ZHA-konfigurationspanelet? Det er blevet flyttet til ZHA-posten på {integrations_page}.",
|
||||
"missing_zwave": "Mangler Z-wave-konfigurationspanelet? Det er blevet flyttet til Z-wave-posten på {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Tilføj integration",
|
||||
"caption": "Integrationer",
|
||||
@@ -1461,7 +1468,9 @@
|
||||
},
|
||||
"introduction": "Her er det muligt at konfigurere dine komponenter og Home Assistant. Ikke alt er muligt at konfigurere fra brugerfladen endnu, men vi arbejder på det.",
|
||||
"logs": {
|
||||
"caption": "Logs",
|
||||
"clear": "Ryd",
|
||||
"description": "Se logs for Home Assistant",
|
||||
"details": "Logdetaljer ({level})",
|
||||
"load_full_log": "Indlæs fuld Home Assistant-log",
|
||||
"loading_log": "Indlæser fejllog...",
|
||||
@@ -1548,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Lyt til et emne",
|
||||
"description_publish": "Udsend en pakke",
|
||||
"listening_to": "Lytter til",
|
||||
"message_received": "Besked {id} er modtaget på {topic} kl. {time}:",
|
||||
"payload": "Payload (skabelon tilladt)",
|
||||
"publish": "Udsend",
|
||||
"start_listening": "Start med at lytte",
|
||||
"stop_listening": "Stop med at lytte",
|
||||
"subscribe_to": "Emne at abonnere på",
|
||||
"title": "MQTT",
|
||||
"topic": "emne"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Tilføj person",
|
||||
"caption": "Personer",
|
||||
@@ -1656,6 +1678,11 @@
|
||||
"core": "Genindlæs lokalitet og tilpasninger",
|
||||
"group": "Genindlæs grupper",
|
||||
"heading": "Genindlæsning af YAML-konfiguration",
|
||||
"input_boolean": "Genindlæs booleske input",
|
||||
"input_datetime": "Genindlæs inputdatotider",
|
||||
"input_number": "Genindlæs inputnumre",
|
||||
"input_select": "Genindlæs inputvalg",
|
||||
"input_text": "Genindlæs inputtekster",
|
||||
"introduction": "Nogle dele af Home Assistant kan genindlæses uden en genstart. Tryk på genindlæs for at aflæse den nuværende YAML-konfiguration og indlæse den nye.",
|
||||
"person": "Genindlæs personer",
|
||||
"scene": "Genindlæs scener",
|
||||
@@ -1719,8 +1746,11 @@
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "Enheder vil dukke op her, når de er fundet.",
|
||||
"discovery_text": "Fundne enheder vil dukke op her. Følg instruktionerne for din enhed(er) og sæt enhed(erne) i parringstilstand.",
|
||||
"header": "Zigbee Home Automation - Tilføj enheder",
|
||||
"no_devices_found": "Ingen enheder blev fundet. Sørg for at de er i paringtilstand, og hold dem vågne, mens opdagelsen kører.",
|
||||
"pairing_mode": "Sørg for, at dine enheder er i parringstilstand. Se enhedens vejledning i, hvordan du gør dette.",
|
||||
"search_again": "Søg igen",
|
||||
"spinner": "Søger efter ZHA Zigbee-enheder..."
|
||||
},
|
||||
@@ -1728,6 +1758,7 @@
|
||||
"caption": "Tilføj enheder",
|
||||
"description": "Føj enheder til Zigbee-netværk"
|
||||
},
|
||||
"button": "Konfigurer",
|
||||
"caption": "ZHA",
|
||||
"cluster_attributes": {
|
||||
"attributes_of_cluster": "Egenskaber for den valgte klynge",
|
||||
@@ -1806,6 +1837,9 @@
|
||||
"header": "Netværksstyring",
|
||||
"introduction": "Kommandoer, der påvirker hele netværket"
|
||||
},
|
||||
"network": {
|
||||
"caption": "Netværk"
|
||||
},
|
||||
"node_management": {
|
||||
"header": "Enhedshåndtering",
|
||||
"help_node_dropdown": "Vælg en enhed for at få vist enhedsspecifikke indstillinger.",
|
||||
@@ -1845,6 +1879,7 @@
|
||||
"no_zones_created_yet": "Det ser ud til, at du ikke har oprettet nogen zoner endnu."
|
||||
},
|
||||
"zwave": {
|
||||
"button": "Konfigurer",
|
||||
"caption": "Z-Wave",
|
||||
"common": {
|
||||
"index": "Indeks",
|
||||
@@ -1886,12 +1921,17 @@
|
||||
"add_node_secure": "Tilføj sikkert knudepunkt",
|
||||
"cancel_command": "Annuller kommando",
|
||||
"heal_network": "Helbred netværk",
|
||||
"heal_node": "Helbred node",
|
||||
"node_info": "Node information",
|
||||
"print_node": "Udskriv node",
|
||||
"refresh_entity": "Opdater entitet",
|
||||
"remove_node": "Fjern knudepunkt",
|
||||
"save_config": "Gem konfiguration",
|
||||
"soft_reset": "Blød nulstilling",
|
||||
"start_network": "Start netværk",
|
||||
"stop_network": "Stop netværk",
|
||||
"test_network": "Test netværk"
|
||||
"test_network": "Test netværk",
|
||||
"test_node": "Test node"
|
||||
},
|
||||
"values": {
|
||||
"header": "Knudepunktsværdier"
|
||||
@@ -1925,19 +1965,6 @@
|
||||
"title": "Hændelser",
|
||||
"type": "Hændelsestype"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Lyt til et emne",
|
||||
"description_publish": "Udsend en pakke",
|
||||
"listening_to": "Lytter til",
|
||||
"message_received": "Besked {id} er modtaget på {topic} kl. {time}:",
|
||||
"payload": "Payload (skabelon tilladt)",
|
||||
"publish": "Udsend",
|
||||
"start_listening": "Start med at lytte",
|
||||
"stop_listening": "Stop med at lytte",
|
||||
"subscribe_to": "Emne at abonnere på",
|
||||
"title": "MQTT",
|
||||
"topic": "emne"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Fejl under afkodning af YAML: {data}",
|
||||
"call_service": "Kald tjeneste",
|
||||
|
||||
@@ -1551,6 +1551,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Auf einen Topic hören",
|
||||
"description_publish": "Ein Paket veröffentlichen",
|
||||
"listening_to": "Anhören von",
|
||||
"message_received": "Nachricht {id} empfangen auf {topic} um {time}:",
|
||||
"payload": "Payload (Vorlage erlaubt)",
|
||||
"publish": "Veröffentlichen",
|
||||
"start_listening": "Anfangen zuzuhören",
|
||||
"stop_listening": "Aufhören zuzuhören",
|
||||
"subscribe_to": "Topic abonnieren",
|
||||
"title": "MQTT",
|
||||
"topic": "Topic"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Person hinzufügen",
|
||||
"caption": "Personen",
|
||||
@@ -1968,19 +1981,6 @@
|
||||
"title": "Ereignisse",
|
||||
"type": "Ereignistyp"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Auf einen Topic hören",
|
||||
"description_publish": "Ein Paket veröffentlichen",
|
||||
"listening_to": "Anhören von",
|
||||
"message_received": "Nachricht {id} empfangen auf {topic} um {time}:",
|
||||
"payload": "Payload (Vorlage erlaubt)",
|
||||
"publish": "Veröffentlichen",
|
||||
"start_listening": "Anfangen zuzuhören",
|
||||
"stop_listening": "Aufhören zuzuhören",
|
||||
"subscribe_to": "Topic abonnieren",
|
||||
"title": "MQTT",
|
||||
"topic": "Topic"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Fehler beim Parsen von YAML: {data}",
|
||||
"call_service": "Dienst ausführen",
|
||||
|
||||
@@ -1319,6 +1319,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ακούστε ένα θέμα",
|
||||
"description_publish": "Δημοσιεύστε ένα πακέτο",
|
||||
"listening_to": "Ακούγοντας το",
|
||||
"message_received": "Το μήνυμα {id} ελήφθη στο {topic} στις {time}:",
|
||||
"payload": "Τιμή φορτίου (επιτρέπεται το πρότυπο)",
|
||||
"publish": "Δημοσιεύστε",
|
||||
"start_listening": "Ξεκινήστε να ακούτε",
|
||||
"stop_listening": "Σταματήστε να ακούτε",
|
||||
"subscribe_to": "Θέμα για το οποίο θα εγγραφείτε",
|
||||
"title": "MQTT",
|
||||
"topic": "θέμα"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Προσθέστε Άτομο",
|
||||
"caption": "Άτομα",
|
||||
@@ -1651,19 +1664,6 @@
|
||||
"title": "Γεγονότα",
|
||||
"type": "Τύπος συμβάντος"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ακούστε ένα θέμα",
|
||||
"description_publish": "Δημοσιεύστε ένα πακέτο",
|
||||
"listening_to": "Ακούγοντας το",
|
||||
"message_received": "Το μήνυμα {id} ελήφθη στο {topic} στις {time}:",
|
||||
"payload": "Τιμή φορτίου (επιτρέπεται το πρότυπο)",
|
||||
"publish": "Δημοσιεύστε",
|
||||
"start_listening": "Ξεκινήστε να ακούτε",
|
||||
"stop_listening": "Σταματήστε να ακούτε",
|
||||
"subscribe_to": "Θέμα για το οποίο θα εγγραφείτε",
|
||||
"title": "MQTT",
|
||||
"topic": "θέμα"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Σφάλμα ανάλυσης του YAML: {data}",
|
||||
"call_service": "Κάλεσμα υπηρεσίας",
|
||||
|
||||
@@ -506,6 +506,11 @@
|
||||
"clear": "Clear",
|
||||
"show_areas": "Show areas"
|
||||
},
|
||||
"date-range-picker": {
|
||||
"end_date": "End date",
|
||||
"select": "Select",
|
||||
"start_date": "Start date"
|
||||
},
|
||||
"device-picker": {
|
||||
"clear": "Clear",
|
||||
"device": "Device",
|
||||
@@ -695,6 +700,7 @@
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"add": "Add Devices via this device",
|
||||
"clusters": "Manage Clusters",
|
||||
"reconfigure": "Reconfigure Device",
|
||||
"remove": "Remove Device",
|
||||
"zigbee_information": "Zigbee device signature"
|
||||
@@ -1557,6 +1563,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"button": "Configure",
|
||||
"description_listen": "Listen to a topic",
|
||||
"description_publish": "Publish a packet",
|
||||
"listening_to": "Listening to",
|
||||
"message_received": "Message {id} received on {topic} at {time}:",
|
||||
"payload": "Payload (template allowed)",
|
||||
"publish": "Publish",
|
||||
"start_listening": "Start listening",
|
||||
"stop_listening": "Stop listening",
|
||||
"subscribe_to": "Topic to subscribe to",
|
||||
"title": "MQTT",
|
||||
"topic": "topic"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Add Person",
|
||||
"caption": "Persons",
|
||||
@@ -1979,19 +1999,6 @@
|
||||
"title": "Events",
|
||||
"type": "Event Type"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Listen to a topic",
|
||||
"description_publish": "Publish a packet",
|
||||
"listening_to": "Listening to",
|
||||
"message_received": "Message {id} received on {topic} at {time}:",
|
||||
"payload": "Payload (template allowed)",
|
||||
"publish": "Publish",
|
||||
"start_listening": "Start listening",
|
||||
"stop_listening": "Stop listening",
|
||||
"subscribe_to": "Topic to subscribe to",
|
||||
"title": "MQTT",
|
||||
"topic": "topic"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Error parsing YAML: {data}",
|
||||
"call_service": "Call Service",
|
||||
@@ -2035,11 +2042,23 @@
|
||||
},
|
||||
"history": {
|
||||
"period": "Period",
|
||||
"ranges": {
|
||||
"last_week": "Last week",
|
||||
"this_week": "This week",
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday"
|
||||
},
|
||||
"showing_entries": "Showing entries for"
|
||||
},
|
||||
"logbook": {
|
||||
"entries_not_found": "No logbook entries found.",
|
||||
"period": "Period",
|
||||
"ranges": {
|
||||
"last_week": "Last week",
|
||||
"this_week": "This week",
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday"
|
||||
},
|
||||
"showing_entries": "Showing entries for"
|
||||
},
|
||||
"lovelace": {
|
||||
|
||||
@@ -172,6 +172,18 @@
|
||||
"no_issues": "Ne estas novaj aferoj!",
|
||||
"refresh": "Refreŝigi"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Aŭskulti temon",
|
||||
"description_publish": "Publikigi pakaĵon",
|
||||
"listening_to": "Aŭskulti",
|
||||
"message_received": "Mesaĝo {id} ricevita sur {topic} je {time} :",
|
||||
"payload": "Pagŝarĝo (ŝablono permesita)",
|
||||
"publish": "Publikigi",
|
||||
"start_listening": "Komenci aŭskulti",
|
||||
"stop_listening": "Halti aŭskulti",
|
||||
"subscribe_to": "Temo por aboni",
|
||||
"topic": "temo"
|
||||
},
|
||||
"scene": {
|
||||
"activated": "Aktivigita sceno {name}.",
|
||||
"caption": "Scenoj",
|
||||
@@ -316,18 +328,6 @@
|
||||
"subscribe_to": "Evento por aboni",
|
||||
"type": "Eventa Tipo"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Aŭskulti temon",
|
||||
"description_publish": "Publikigi pakaĵon",
|
||||
"listening_to": "Aŭskulti",
|
||||
"message_received": "Mesaĝo {id} ricevita sur {topic} je {time} :",
|
||||
"payload": "Pagŝarĝo (ŝablono permesita)",
|
||||
"publish": "Publikigi",
|
||||
"start_listening": "Komenci aŭskulti",
|
||||
"stop_listening": "Halti aŭskulti",
|
||||
"subscribe_to": "Temo por aboni",
|
||||
"topic": "temo"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Eraro dum analizado de YAML: {data}",
|
||||
"call_service": "Voka Servo",
|
||||
|
||||
@@ -955,7 +955,7 @@
|
||||
"start": "Inicio"
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "MQTT",
|
||||
"label": "",
|
||||
"payload": "Payload (opcional)",
|
||||
"topic": "Topic"
|
||||
},
|
||||
@@ -1551,6 +1551,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Escuchar un tema",
|
||||
"description_publish": "Publicar un paquete",
|
||||
"listening_to": "Escuchando a",
|
||||
"message_received": "Mensaje {id} recibido el {topic} a las {time} :",
|
||||
"payload": "Carga útil (plantilla permitida)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Comenzar a escuchar",
|
||||
"stop_listening": "Deja de escuchar",
|
||||
"subscribe_to": "Tema para suscribirse",
|
||||
"title": "",
|
||||
"topic": "tema"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Agregar persona",
|
||||
"caption": "Personas",
|
||||
@@ -1964,19 +1977,6 @@
|
||||
"title": "Eventos",
|
||||
"type": "Tipo de evento"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Escuchar un tema",
|
||||
"description_publish": "Publicar un paquete",
|
||||
"listening_to": "Escuchando a",
|
||||
"message_received": "Mensaje {id} recibido el {topic} a las {time} :",
|
||||
"payload": "Carga útil (plantilla permitida)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Comenzar a escuchar",
|
||||
"stop_listening": "Deja de escuchar",
|
||||
"subscribe_to": "Tema para suscribirse",
|
||||
"title": "",
|
||||
"topic": "tema"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Error al analizar YAML: {data}",
|
||||
"call_service": "Llamar al Servico",
|
||||
|
||||
@@ -694,10 +694,10 @@
|
||||
},
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"add": "Añadir dispositivos",
|
||||
"add": "Añadir dispositivos a través de este dispositivo",
|
||||
"reconfigure": "Reconfigurar dispositivo",
|
||||
"remove": "Eliminar dispositivos",
|
||||
"zigbee_information": "Información Zigbee"
|
||||
"zigbee_information": "Firma del dispositivo Zigbee"
|
||||
},
|
||||
"confirmations": {
|
||||
"remove": "¿Estás seguro de que quieres eliminar este dispositivo?"
|
||||
@@ -717,7 +717,7 @@
|
||||
"unknown": "Desconocido",
|
||||
"zha_device_card": {
|
||||
"area_picker_label": "Área",
|
||||
"device_name_placeholder": "Nombre dado por el usuario",
|
||||
"device_name_placeholder": "Cambiar el nombre del dispositivo",
|
||||
"update_name_button": "Cambiar nombre"
|
||||
}
|
||||
}
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "El componente Estado del Sistema no está cargado. Añade 'system_health:' a configuration.yaml",
|
||||
"title": "Información"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "página de integraciones",
|
||||
"missing_zha": "¿Echas de menos el panel de configuración de ZHA? Se ha movido a la entrada ZHA en la {integrations_page}.",
|
||||
"missing_zwave": "¿Echas de menos el panel de configuración de Z-Wave? Se ha movido a la entrada Z-Wave en la {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Añadir integración",
|
||||
"caption": "Integraciones",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Escuchar un tema",
|
||||
"description_publish": "Publicar un paquete",
|
||||
"listening_to": "Escuchando",
|
||||
"message_received": "Mensaje {id} recibido en {topic} a las {time}:",
|
||||
"payload": "Payload (plantilla permitida)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Empezar a escuchar",
|
||||
"stop_listening": "Dejar de escuchar",
|
||||
"subscribe_to": "Tema al que suscribirse",
|
||||
"title": "MQTT",
|
||||
"topic": "tema"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Añadir persona",
|
||||
"caption": "Personas",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "Eventos",
|
||||
"type": "Tipo de evento"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Escuchar un tema",
|
||||
"description_publish": "Publicar un paquete",
|
||||
"listening_to": "Escuchando",
|
||||
"message_received": "Mensaje {id} recibido en {topic} a las {time}:",
|
||||
"payload": "Payload (plantilla permitida)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Empezar a escuchar",
|
||||
"stop_listening": "Dejar de escuchar",
|
||||
"subscribe_to": "Tema al que suscribirse",
|
||||
"title": "MQTT",
|
||||
"topic": "tema"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Error al analizar YAML: {data}",
|
||||
"call_service": "Llamar servicio",
|
||||
|
||||
@@ -1223,6 +1223,16 @@
|
||||
"refresh": "Värskenda",
|
||||
"title": "Logid"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Kuula teemat",
|
||||
"listening_to": "Kuulamas",
|
||||
"publish": "Avalda",
|
||||
"start_listening": "Alusta kuulamist",
|
||||
"stop_listening": "Lõpeta kuulamine",
|
||||
"subscribe_to": "Teema, mida tellida",
|
||||
"title": "MQTT",
|
||||
"topic": "teema"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Lisa isik",
|
||||
"caption": "Isikud",
|
||||
@@ -1534,16 +1544,6 @@
|
||||
"title": "Sündmused",
|
||||
"type": "Sündmuse tüüp"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Kuula teemat",
|
||||
"listening_to": "Kuulamas",
|
||||
"publish": "Avalda",
|
||||
"start_listening": "Alusta kuulamist",
|
||||
"stop_listening": "Lõpeta kuulamine",
|
||||
"subscribe_to": "Teema, mida tellida",
|
||||
"title": "MQTT",
|
||||
"topic": "teema"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Viga YAML'i parsimisel: {data}",
|
||||
"call_service": "Kutsu teenus",
|
||||
|
||||
@@ -569,6 +569,9 @@
|
||||
"new": "Integrazio berri bat konfiguratu",
|
||||
"none": "Ez dago ezer konfiguratuta"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Pertsonak",
|
||||
"description": "Kudeatu Home Assistantek jarraituko dituen pertsonak.",
|
||||
@@ -620,9 +623,6 @@
|
||||
"events": {
|
||||
"title": "Gertaerak"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Zerbitzuak"
|
||||
},
|
||||
|
||||
@@ -755,6 +755,9 @@
|
||||
"homeassistant": {
|
||||
"label": "Home Assistant"
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
},
|
||||
"numeric_state": {
|
||||
"label": "حالت عددی"
|
||||
},
|
||||
@@ -1154,6 +1157,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"publish": "Publica",
|
||||
"subscribe_to": "Subiect pentru abonare",
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Adauga Persoana",
|
||||
"caption": "افراد",
|
||||
@@ -1362,11 +1370,6 @@
|
||||
"events": {
|
||||
"title": "رویدادها"
|
||||
},
|
||||
"mqtt": {
|
||||
"publish": "Publica",
|
||||
"subscribe_to": "Subiect pentru abonare",
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"call_service": "Apeleaza serviciul",
|
||||
"column_description": "Descriere",
|
||||
|
||||
@@ -483,6 +483,7 @@
|
||||
"menu": "Valikko",
|
||||
"next": "Seuraava",
|
||||
"no": "Ei",
|
||||
"overflow_menu": "Ylivuotovalikko",
|
||||
"previous": "Edellinen",
|
||||
"refresh": "Päivitä",
|
||||
"save": "Tallenna",
|
||||
@@ -912,6 +913,8 @@
|
||||
"introduction": "Käytä automaatioita herättääksesi kotisi eloon",
|
||||
"load_error_not_editable": "Vain automaatiot tiedostossa automations.yaml ovat muokattavissa.",
|
||||
"load_error_unknown": "Virhe ladatessa automaatiota ( {err_no} )",
|
||||
"move_down": "Siirrä alaspäin",
|
||||
"move_up": "Siirrä ylöspäin",
|
||||
"save": "Tallenna",
|
||||
"triggers": {
|
||||
"add": "Laukaisuehto",
|
||||
@@ -1370,7 +1373,9 @@
|
||||
},
|
||||
"info": {
|
||||
"built_using": "Rakennettu käyttäen",
|
||||
"caption": "Tiedot",
|
||||
"custom_uis": "Mukautetut käyttöliittymät:",
|
||||
"description": "Tietoja Home Assistant -asennuksesta",
|
||||
"developed_by": "Kehittänyt joukko mahtavia ihmisiä.",
|
||||
"documentation": "Dokumentointi",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1386,6 +1391,11 @@
|
||||
"system_health_error": "Järjestelmän kunto-komponenttia ei ole ladattu. Lisää 'system_health:' kohteeseen configuration.yaml",
|
||||
"title": "Tiedot"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "Integraatiot",
|
||||
"missing_zha": "Etsitkö ZHA-asetuspaneelia? Se siirrettiin kohtaan ZHA {integrations_page}.",
|
||||
"missing_zwave": "Etsitkö Z-Wave-asetuspaneelia? Se siirrettiin Z-Wave-kohtaan {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Lisää integraatio",
|
||||
"caption": "Integraatiot",
|
||||
@@ -1458,7 +1468,9 @@
|
||||
},
|
||||
"introduction": "Täällä voit säätää Home Assistanttia ja sen komponentteja. Huomioithan, ettei kaikkea voi vielä säätää käyttöliittymän kautta, mutta teemme jatkuvasti töitä sen mahdollistamiseksi.",
|
||||
"logs": {
|
||||
"caption": "Lokit",
|
||||
"clear": "Tyhjennä",
|
||||
"description": "Tarkastele Home Assistant -lokeja",
|
||||
"details": "Lokitiedot ( {level} )",
|
||||
"load_full_log": "Lataa Home Assistantin koko loki",
|
||||
"loading_log": "Ladataan virhelokia...",
|
||||
@@ -1545,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Kuuntele aihetta",
|
||||
"description_publish": "Julkaise paketti",
|
||||
"listening_to": "Kuunnellaan",
|
||||
"message_received": "Viesti {id} vastaanotettu aiheessa {topic} {time}:",
|
||||
"payload": "Tietosisältö (malli sallittu)",
|
||||
"publish": "Julkaise",
|
||||
"start_listening": "Aloita kuuntelu",
|
||||
"stop_listening": "Lopeta kuuntelu",
|
||||
"subscribe_to": "Tilaa aihe",
|
||||
"title": "MQTT",
|
||||
"topic": "aihe"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Lisää henkilö",
|
||||
"caption": "Henkilöt",
|
||||
@@ -1653,6 +1678,11 @@
|
||||
"core": "Lataa ydin uudelleen",
|
||||
"group": "Lataa ryhmät uudelleen",
|
||||
"heading": "Asetusten uudelleenlataus",
|
||||
"input_boolean": "Lataa booleanit uudelleen",
|
||||
"input_datetime": "Lataa syöttöpäivämäärät uudelleen",
|
||||
"input_number": "Lataa syöttönumerot uudelleen",
|
||||
"input_select": "Lataa valinnat uudelleen",
|
||||
"input_text": "Lataa syöttötekstit uudelleen",
|
||||
"introduction": "Jotkut Home Assistantin osat voidaan ladata uudelleen ilman, että tarvitaan uudelleenkäynnistystä. Painamalla uudelleenlatausta yaml-tiedosto luetaan uudelleen.",
|
||||
"person": "Lataa henkilöt uudelleen",
|
||||
"scene": "Lataa tilanteet uudelleen",
|
||||
@@ -1716,8 +1746,11 @@
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "Laitteet tulevat tänne, kun ne löydetään.",
|
||||
"discovery_text": "Löydetyt laitteet näkyvät täällä. Noudata laitteen (laitteiden) ohjeita ja aseta laite pariliitostilaan.",
|
||||
"header": "Zigbee Home Automation - Lisää laitteita",
|
||||
"no_devices_found": "Mitään laitteita ei löydy. Varmista, että ne ovat paritustilassa ja pidä ne hereillä havaitsemisen ollessa käynnissä.",
|
||||
"pairing_mode": "Varmista, että laitteesi ovat paritustilassa. Tarkista laitteen ohjeet, kuinka tämä tehdään.",
|
||||
"search_again": "Etsi uudestaan",
|
||||
"spinner": "Etsitään ZHA Zigbee laitteita..."
|
||||
},
|
||||
@@ -1725,6 +1758,7 @@
|
||||
"caption": "Lisää laitteita",
|
||||
"description": "Lisää laitteita Zigbee-verkkoon"
|
||||
},
|
||||
"button": "Määritä",
|
||||
"caption": "ZHA",
|
||||
"cluster_attributes": {
|
||||
"attributes_of_cluster": "Valitun klusterin määritteet",
|
||||
@@ -1803,6 +1837,9 @@
|
||||
"header": "Verkon hallinta",
|
||||
"introduction": "Koko verkkoon vaikuttavat komennot"
|
||||
},
|
||||
"network": {
|
||||
"caption": "Verkko"
|
||||
},
|
||||
"node_management": {
|
||||
"header": "Laitehallinta",
|
||||
"help_node_dropdown": "Valitse laite tarkastellaksesi laitekohtaisia vaihtoehtoja.",
|
||||
@@ -1842,6 +1879,7 @@
|
||||
"no_zones_created_yet": "Näyttää siltä, että et ole vielä luonut vyöhykkeitä."
|
||||
},
|
||||
"zwave": {
|
||||
"button": "Määritä",
|
||||
"caption": "Z-Wave",
|
||||
"common": {
|
||||
"index": "Indeksi",
|
||||
@@ -1954,19 +1992,6 @@
|
||||
"title": "Tapahtumat",
|
||||
"type": "Tapahtumatyyppi"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Kuuntele aihetta",
|
||||
"description_publish": "Julkaise paketti",
|
||||
"listening_to": "Kuunnellaan",
|
||||
"message_received": "Viesti {id} vastaanotettu aiheessa {topic} {time}:",
|
||||
"payload": "Tietosisältö (malli sallittu)",
|
||||
"publish": "Julkaise",
|
||||
"start_listening": "Aloita kuuntelu",
|
||||
"stop_listening": "Lopeta kuuntelu",
|
||||
"subscribe_to": "Tilaa aihe",
|
||||
"title": "MQTT",
|
||||
"topic": "aihe"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Virhe jäsennetettäessä YAML:ää: {data}",
|
||||
"call_service": "Kutsu palvelua",
|
||||
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "Le composant System Health n'est pas chargé. Ajouter 'system_health:' à configuration.yaml",
|
||||
"title": "Info"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "page d'intégration",
|
||||
"missing_zha": "Il manque le panneau de configuration de ZHA ? Il a été déplacé vers l'entrée ZHA sur la {integrations_page}.",
|
||||
"missing_zwave": "Il manque le panneau de configuration Z-Wave ? Il a été déplacé vers l'entrée Z-Wave sur la {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Ajouter l'intégration",
|
||||
"caption": "Intégrations",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Écouter un sujet",
|
||||
"description_publish": "Publier un paquet",
|
||||
"listening_to": "Écouter",
|
||||
"message_received": "Message {id} reçu sur {topic} à {time} :",
|
||||
"payload": "Payload (modèle autorisé)",
|
||||
"publish": "Publier",
|
||||
"start_listening": "Commencer à écouter",
|
||||
"stop_listening": "Arrêter d'écouter",
|
||||
"subscribe_to": "Sujet auquel s'abonner",
|
||||
"title": "MQTT",
|
||||
"topic": "sujet"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Ajouter une personne",
|
||||
"caption": "Personnes",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "Événements",
|
||||
"type": "Type d'événement"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Écouter un sujet",
|
||||
"description_publish": "Publier un paquet",
|
||||
"listening_to": "Écouter",
|
||||
"message_received": "Message {id} reçu sur {topic} à {time} :",
|
||||
"payload": "Payload (modèle autorisé)",
|
||||
"publish": "Publier",
|
||||
"start_listening": "Commencer à écouter",
|
||||
"stop_listening": "Arrêter d'écouter",
|
||||
"subscribe_to": "Sujet auquel s'abonner",
|
||||
"title": "MQTT",
|
||||
"topic": "sujet"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Erreur d'analyse de YAML : {data}",
|
||||
"call_service": "Appeler le service",
|
||||
|
||||
@@ -491,6 +491,9 @@
|
||||
"none_found": "Keine Integrationen gefunden",
|
||||
"none_found_detail": "Passen Sie Ihre Suchkriterien an."
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"users": {
|
||||
"caption": "Benutzer",
|
||||
"editor": {
|
||||
@@ -501,13 +504,6 @@
|
||||
"caption": "Z-Wave"
|
||||
}
|
||||
},
|
||||
"developer-tools": {
|
||||
"tabs": {
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
}
|
||||
}
|
||||
},
|
||||
"history": {
|
||||
"period": "Periode"
|
||||
},
|
||||
|
||||
+114
-17
@@ -471,11 +471,15 @@
|
||||
},
|
||||
"common": {
|
||||
"and": "וגם",
|
||||
"back": "חזור",
|
||||
"cancel": "ביטול",
|
||||
"delete": "מחיקה",
|
||||
"error_required": "חובה",
|
||||
"loading": "טוען",
|
||||
"menu": "תפריט",
|
||||
"next": "הבא",
|
||||
"no": "לא",
|
||||
"overflow_menu": "תפריט גולש",
|
||||
"previous": "הקודם",
|
||||
"refresh": "רענן",
|
||||
"save": "שמור",
|
||||
@@ -488,6 +492,7 @@
|
||||
"device-picker": {
|
||||
"clear": "נקה",
|
||||
"device": "התקן",
|
||||
"no_area": "אין אזור",
|
||||
"show_devices": "הצג התקנים"
|
||||
},
|
||||
"entity": {
|
||||
@@ -530,17 +535,39 @@
|
||||
"close": "סגור"
|
||||
},
|
||||
"helper_settings": {
|
||||
"generic": {
|
||||
"icon": "סמל",
|
||||
"name": "שם"
|
||||
},
|
||||
"input_datetime": {
|
||||
"date": "תאריך",
|
||||
"datetime": "תאריך ושעה",
|
||||
"time": "זמן"
|
||||
},
|
||||
"input_number": {
|
||||
"box": "שדה קלט",
|
||||
"max": "ערך מקסימאלי",
|
||||
"min": "ערך מינימלי",
|
||||
"mode": "מצב תצוגה",
|
||||
"slider": "סליידר",
|
||||
"step": "גודל צעד",
|
||||
"unit_of_measurement": "יחידת מידה"
|
||||
},
|
||||
"input_select": {
|
||||
"add": "הוסף",
|
||||
"add_option": "הוסף אפשרות",
|
||||
"no_options": "אין עדיין אפשרויות.",
|
||||
"options": "אפשרויות"
|
||||
}
|
||||
},
|
||||
"input_text": {
|
||||
"max": "אורך מקסימאלי",
|
||||
"min": "אורך מינימלי",
|
||||
"mode": "מצב תצוגה",
|
||||
"password": "סיסמה",
|
||||
"pattern": "דפוס Regex לצורך אימות בצד הלקוח",
|
||||
"text": "טקסט"
|
||||
},
|
||||
"required_error_msg": "שדה זה הוא חובה"
|
||||
},
|
||||
"more_info_control": {
|
||||
"dismiss": "סגור",
|
||||
@@ -629,6 +656,8 @@
|
||||
"notification_toast": {
|
||||
"connection_lost": "החיבור אבד. מתחבר מחדש...",
|
||||
"service_call_failed": "נכשלה הקריאה לשירות {service} .",
|
||||
"started": "Home Assistant עלה!",
|
||||
"starting": "Home Assistant בעלייה, ייתכן שלא הכל יהיה זמין עד שהעליה תסתיים",
|
||||
"triggered": "הופעל {שם}"
|
||||
},
|
||||
"panel": {
|
||||
@@ -653,8 +682,12 @@
|
||||
},
|
||||
"description": "סקירה של כל האזורים בביתך",
|
||||
"editor": {
|
||||
"area_id": "מזהה אזור",
|
||||
"create": "צור",
|
||||
"delete": "מחק",
|
||||
"name": "שם",
|
||||
"name_required": "שם הוא חובה",
|
||||
"unknown_error": "שגיאה לא ידועה",
|
||||
"update": "עדכון"
|
||||
},
|
||||
"picker": {
|
||||
@@ -687,6 +720,7 @@
|
||||
"label": "עיכוב"
|
||||
},
|
||||
"device_id": {
|
||||
"action": "פעולה",
|
||||
"extra_fields": {
|
||||
"code": "קוד"
|
||||
},
|
||||
@@ -728,6 +762,7 @@
|
||||
"label": "וגם"
|
||||
},
|
||||
"device": {
|
||||
"condition": "תנאי",
|
||||
"extra_fields": {
|
||||
"above": "מעל",
|
||||
"below": "מתחת",
|
||||
@@ -787,6 +822,8 @@
|
||||
"introduction": "השתמש/י באוטומציות להפיח חיים בביתך.",
|
||||
"load_error_not_editable": "רק אוטומציה ב automations.yaml ניתנים לעריכה.",
|
||||
"load_error_unknown": "שגיאה בטעינת האוטומציה ( {err_no} ).",
|
||||
"move_down": "הזז למטה",
|
||||
"move_up": "הזז למעלה",
|
||||
"save": "שמור",
|
||||
"triggers": {
|
||||
"add": "הוספת טריגר",
|
||||
@@ -805,7 +842,8 @@
|
||||
"below": "מתחת",
|
||||
"for": "משך"
|
||||
},
|
||||
"label": "התקן"
|
||||
"label": "התקן",
|
||||
"trigger": "טריגר"
|
||||
},
|
||||
"event": {
|
||||
"event_data": "נתוני אירוע",
|
||||
@@ -1096,6 +1134,7 @@
|
||||
"different_include": "יתכן דרך דומיין, גלובלי או כלול אחר.",
|
||||
"pick_attribute": "בחר תכונה לדריסה",
|
||||
"picker": {
|
||||
"entity": "ישות",
|
||||
"header": "התאמה אישית",
|
||||
"introduction": "כוונן תכונות של כל ישות. ההתאמות הנוספות שנוספו / ייכנסו לתוקף באופן מיידי. התאמות אישיות שהוסרו ייכנסו לתוקף כאשר הישות תעודכן."
|
||||
},
|
||||
@@ -1127,12 +1166,16 @@
|
||||
"integration": "אינטגרציה",
|
||||
"manufacturer": "יצרן",
|
||||
"model": "מודל",
|
||||
"no_area": "אין אזור",
|
||||
"no_devices": "אין התקנים"
|
||||
},
|
||||
"delete": "מחיקה",
|
||||
"description": "ניהול התקנים מחוברים",
|
||||
"device_info": "פרטי התקן",
|
||||
"device_not_found": "ההתקן לא נמצא.",
|
||||
"entities": {
|
||||
"disabled_entities": "+{count} {count, plural,\n one {disabled entity}\n other {disabled entities}\n}"
|
||||
},
|
||||
"no_devices": "אין התקנים",
|
||||
"unknown_error": "שגיאה לא ידועה",
|
||||
"unnamed_device": "התקן ללא שם"
|
||||
@@ -1163,11 +1206,14 @@
|
||||
},
|
||||
"header": "הגדר את Home Assistant",
|
||||
"helpers": {
|
||||
"caption": "עוזרים",
|
||||
"description": "רכיבים שיכולים לסייע בבניית אוטומציות.",
|
||||
"dialog": {
|
||||
"add_platform": "הוסף {platform}",
|
||||
"create": "צור"
|
||||
},
|
||||
"picker": {
|
||||
"add_helper": "הוסף עוזר",
|
||||
"headers": {
|
||||
"editable": "ניתן לעריכה",
|
||||
"entity_id": "מזהה ישות",
|
||||
@@ -1176,14 +1222,18 @@
|
||||
}
|
||||
},
|
||||
"types": {
|
||||
"input_boolean": "החלף מצב",
|
||||
"input_datetime": "תאריך ו/או שעה",
|
||||
"input_number": "מספר",
|
||||
"input_select": "תיבת בחירה",
|
||||
"input_text": "טקסט"
|
||||
}
|
||||
},
|
||||
"info": {
|
||||
"built_using": "נבנה באמצעות",
|
||||
"caption": "מידע",
|
||||
"custom_uis": "ממשקי משתמש מותאמים אישית:",
|
||||
"description": "מידע על ההתקנה של Home Assistant שלך",
|
||||
"developed_by": "פותח על ידי חבורה של אנשים מדהימים.",
|
||||
"documentation": "תיעוד",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1199,6 +1249,11 @@
|
||||
"system_health_error": "רכיב ה System Health אינו טעון. הוסף 'system_health:' ל - configuration.yaml",
|
||||
"title": "מידע"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "עמוד אינטגרציות",
|
||||
"missing_zha": "חסר את לוח התצורה של ZHA? הוא הועבר לכניסה של ZHA בדף {integrations_page} .",
|
||||
"missing_zwave": "חסר את לוח התצורה של Z-Wave? הוא הועבר לכניסה של Z-Wave בכרטיסייה {integrations_page} ."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "הוסף אינטגרציה",
|
||||
"caption": "אינטגרציות",
|
||||
@@ -1256,7 +1311,9 @@
|
||||
},
|
||||
"introduction": "כאן ניתן להגדיר את הרכיבים ואת ה Home Assistant. לא הכל ניתן להגדיר את ממשק המשתמש עדיין, אבל אנחנו עובדים על זה.",
|
||||
"logs": {
|
||||
"caption": "יומנים",
|
||||
"clear": "נקה",
|
||||
"description": "צפה ביומני Home Assistant",
|
||||
"details": "פרטי יומן האירועים ({level})",
|
||||
"load_full_log": "טען את הלוג המלא של Home Assistant",
|
||||
"loading_log": "טוען יומן שגיאות ...",
|
||||
@@ -1333,6 +1390,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "האזנה לנושא",
|
||||
"description_publish": "פרסם חבילה",
|
||||
"listening_to": "האזנה ל",
|
||||
"message_received": "הודעה {id} התקבלה ב- {topic} בשעה {time}:",
|
||||
"payload": "תוכן (תומך בתבניות)",
|
||||
"publish": "פרסם",
|
||||
"start_listening": "התחל להאזין",
|
||||
"stop_listening": "הפסק להאזין",
|
||||
"subscribe_to": "נושא להירשם אליו",
|
||||
"title": "MQTT",
|
||||
"topic": "נושא"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "הוסף אדם",
|
||||
"caption": "אנשים",
|
||||
@@ -1440,6 +1510,11 @@
|
||||
"core": "טען מחדש את הליבה",
|
||||
"group": "טען מחדש קבוצות",
|
||||
"heading": "טען מחדש קונפיגורציה",
|
||||
"input_boolean": "טען מחדש input boolean",
|
||||
"input_datetime": "טען מחדש input date time",
|
||||
"input_number": "טען מחדש input number",
|
||||
"input_select": "טען מחדש input selects",
|
||||
"input_text": "טען מחדש input text",
|
||||
"introduction": "חלקים מסוימים של Home Assistant יכולים להטען מחדש ללא צורך בהפעלה מחדש.\nטעינה מחדש תשנה את הקונפיגורציה הנוכחית ותטען קונפיגורציה חדשה.",
|
||||
"scene": "טען מחדש סצנות",
|
||||
"script": "טען מחדש סקריפטים"
|
||||
@@ -1496,15 +1571,20 @@
|
||||
"name": "שם",
|
||||
"system": "מערכת"
|
||||
}
|
||||
}
|
||||
},
|
||||
"users_privileges_note": "קבוצת המשתמשים הינה עבודה בעיצומה. המשתמש לא יוכל לנהל את המופע באמצעות ממשק המשתמש. אנו עדיין בודקים את כל נקודות הקצה של ממשק ה- API כדי לוודא שהם מגבילים נכון את הגישה למנהלים."
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "מכשירים יופיעו כאן לאחר שהתגלו.",
|
||||
"discovery_text": ". המכשירים שהתגלו יופיעו כאן. עקוב אחר ההוראות עבור ההתקנים שלך והצב את ההתקנים במצב תיאום.",
|
||||
"header": "אוטומציית Zigbee - הוספת התקנים",
|
||||
"no_devices_found": "לא נמצאו התקנים כלשהם, וודאו שהם במצב צימוד והקפידו שיהיו דולקים בזמן הגילוי.",
|
||||
"pairing_mode": "ודא שהמכשירים שלך במצב צימוד. בדוק את הוראות המכשיר שלך כיצד לבצע זאת.",
|
||||
"search_again": "חפש שוב",
|
||||
"spinner": "מחפש מכשירי ZHA Zigbee..."
|
||||
},
|
||||
"button": "הגדר",
|
||||
"caption": "ZHA",
|
||||
"cluster_attributes": {
|
||||
"attributes_of_cluster": "תכונות של האשכול שנבחר",
|
||||
@@ -1538,6 +1618,9 @@
|
||||
"header": "ניהול רשת",
|
||||
"introduction": "פקודות שמשפיעות על הרשת כולה"
|
||||
},
|
||||
"network": {
|
||||
"caption": "רשת"
|
||||
},
|
||||
"node_management": {
|
||||
"header": "ניהול התקן",
|
||||
"help_node_dropdown": "בחר התקן להצגת האפשרויות.",
|
||||
@@ -1547,6 +1630,7 @@
|
||||
}
|
||||
},
|
||||
"zwave": {
|
||||
"button": "הגדר",
|
||||
"caption": "Z-Wave",
|
||||
"common": {
|
||||
"index": "אינדקס",
|
||||
@@ -1579,6 +1663,22 @@
|
||||
"set_wakeup": "בחירת מרווח פעולה",
|
||||
"true": "True"
|
||||
},
|
||||
"node_management": {
|
||||
"entities": "ישויות היחידה",
|
||||
"entity_info": "מידע על הישות",
|
||||
"exclude_entity": "אל תכלול ישות זו ב Home Assistant",
|
||||
"group": "קְבוּצָה",
|
||||
"header": "ניהול יחידות Z-Wave",
|
||||
"introduction": "הפעל פקודות Z-Wave המשפיעות על יחידה בודדת. בחר יחידה כדי לראות רשימה של פקודות זמינות.",
|
||||
"node_group_associations": "קישורי קבוצת היחידה",
|
||||
"node_protection": "הגנת יחידה",
|
||||
"node_to_control": "יחידה לניהול",
|
||||
"nodes": "יחידות",
|
||||
"nodes_hint": "בחר יחידה כדי להציג אפשרויות ליחידה",
|
||||
"pooling_intensity": "עוצמת דגימה",
|
||||
"protection": "הגנה",
|
||||
"set_protection": "הגדרת הגנה"
|
||||
},
|
||||
"ozw_log": {
|
||||
"header": "יומן OZW",
|
||||
"introduction": "צפה ביומן. 0 הוא המינימום (טוען יומן שלם) ו -1000 הוא המקסימום. הטעינה תציג יומן סטטי והסוף יתעדכן אוטומטית במספר האחרון שצוין של שורות היומן."
|
||||
@@ -1588,6 +1688,8 @@
|
||||
"add_node_secure": "הוסף רכיב מאובטח",
|
||||
"cancel_command": "ביטול פקודה",
|
||||
"heal_network": "ריפוי רשת",
|
||||
"node_info": "מידע על היחידה",
|
||||
"refresh_entity": "רענן ישות",
|
||||
"remove_node": "הסר רכיב",
|
||||
"save_config": "שמור קונפיגורציה",
|
||||
"soft_reset": "איפוס רך",
|
||||
@@ -1627,19 +1729,6 @@
|
||||
"title": "אירועים",
|
||||
"type": "סוג אירוע"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "האזנה לנושא",
|
||||
"description_publish": "פרסם חבילה",
|
||||
"listening_to": "האזנה ל",
|
||||
"message_received": "הודעה {id} התקבלה ב- {topic} בשעה {time}:",
|
||||
"payload": "תוכן (תומך בתבניות)",
|
||||
"publish": "פרסם",
|
||||
"start_listening": "התחל להאזין",
|
||||
"stop_listening": "הפסק להאזין",
|
||||
"subscribe_to": "נושא להירשם אליו",
|
||||
"title": "MQTT",
|
||||
"topic": "נושא"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "שגיאה בניתוח YAML: {data}",
|
||||
"call_service": "קריאה לשירות",
|
||||
@@ -1711,6 +1800,10 @@
|
||||
"add_item": "הוסף פריט",
|
||||
"checked_items": "פריטים מסומנים",
|
||||
"clear_items": "נקה פריטים מסומנים"
|
||||
},
|
||||
"starting": {
|
||||
"description": "Home Assistant בעלייה. אנא המתן...",
|
||||
"header": "Home Assistant בעלייה..."
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
@@ -1984,7 +2077,8 @@
|
||||
"attribute_not_found": "השדה {attribute} אינו זמין ב־{entity}",
|
||||
"entity_non_numeric": "הישות אינה מספרית: {entity}",
|
||||
"entity_not_found": "הישות אינה זמינה: {entity}",
|
||||
"entity_unavailable": "כרגע {entity} אינו זמין"
|
||||
"entity_unavailable": "כרגע {entity} אינו זמין",
|
||||
"starting": "Home Assistant בעלייה, ייתכן שלא הכל יהיה זמין"
|
||||
}
|
||||
},
|
||||
"mailbox": {
|
||||
@@ -1997,6 +2091,8 @@
|
||||
"abort_intro": "הכניסה בוטלה",
|
||||
"authorizing_client": "אתה עומד לתת גישה ל{clientId} עבור הHome Assistant שלך.",
|
||||
"form": {
|
||||
"error": "שגיאה: {error}",
|
||||
"next": "הבא",
|
||||
"providers": {
|
||||
"command_line": {
|
||||
"abort": {
|
||||
@@ -2082,6 +2178,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"start_over": "התחל מחדש",
|
||||
"unknown_error": "משהו השתבש",
|
||||
"working": "אנא המתן"
|
||||
},
|
||||
|
||||
@@ -311,6 +311,9 @@
|
||||
"logs": {
|
||||
"title": "लॉग्स"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"script": {
|
||||
"picker": {
|
||||
"headers": {
|
||||
@@ -352,9 +355,6 @@
|
||||
"events": {
|
||||
"title": "घटनाओं"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "सेवाएं"
|
||||
},
|
||||
|
||||
@@ -1056,6 +1056,9 @@
|
||||
"logs": {
|
||||
"title": "Logovi"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Osobe",
|
||||
"description": "Upravljajte osobama koje Home Assistant prati.",
|
||||
@@ -1298,9 +1301,6 @@
|
||||
"events": {
|
||||
"title": "Događaji"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Greška pri analiziranju YAML-a: {data}",
|
||||
"column_parameter": "Parametar",
|
||||
|
||||
@@ -1548,6 +1548,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Téma figyelése",
|
||||
"description_publish": "Csomag közzététele",
|
||||
"listening_to": "Figyelés:",
|
||||
"message_received": "Üzenet ({id}) érkezett a(z) {topic} témában {time}-kor:",
|
||||
"payload": "Payload (sablon megengedett)",
|
||||
"publish": "Közzététel",
|
||||
"start_listening": "Figyelés indítása",
|
||||
"stop_listening": "Figyelés befejezése",
|
||||
"subscribe_to": "Feliratkozás erre a témára",
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Személy hozzáadása",
|
||||
"caption": "Személyek",
|
||||
@@ -1930,19 +1943,6 @@
|
||||
"title": "Események",
|
||||
"type": "Esemény típusa"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Téma figyelése",
|
||||
"description_publish": "Csomag közzététele",
|
||||
"listening_to": "Figyelés:",
|
||||
"message_received": "Üzenet ({id}) érkezett a(z) {topic} témában {time}-kor:",
|
||||
"payload": "Payload (sablon megengedett)",
|
||||
"publish": "Közzététel",
|
||||
"start_listening": "Figyelés indítása",
|
||||
"stop_listening": "Figyelés befejezése",
|
||||
"subscribe_to": "Feliratkozás erre a témára",
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Hiba a YAML elemzésekor: {data}",
|
||||
"call_service": "Szolgáltatás meghívása",
|
||||
|
||||
@@ -840,6 +840,9 @@
|
||||
"logs": {
|
||||
"title": "log-եր"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Անձինք",
|
||||
"description": "Կառավարել այն անձանց, որոնք հետապնդում են Home Assistant-ին:",
|
||||
@@ -965,9 +968,6 @@
|
||||
"events": {
|
||||
"title": "Իրադարձություններ"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Սերվիսներ"
|
||||
},
|
||||
|
||||
@@ -776,6 +776,9 @@
|
||||
"none": "Belum ada yang dikonfigurasi"
|
||||
},
|
||||
"introduction": "Tempat ini bisa digunakan untuk mengonfigurasi komponen dan Home Assistant. Belum semua dapat dikonfigurasikan melalui UI, kami sedang mengusahakannya.",
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Orang",
|
||||
"description": "Kelola orang yang Home Assistant lacak",
|
||||
@@ -821,9 +824,6 @@
|
||||
"events": {
|
||||
"title": "Peristiwa"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Layanan"
|
||||
},
|
||||
|
||||
@@ -1182,6 +1182,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Bæta við persónu",
|
||||
"caption": "Persónur",
|
||||
@@ -1401,9 +1404,6 @@
|
||||
"events": {
|
||||
"title": "Viðburðir"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"call_service": "Kalla í þjónustu",
|
||||
"column_description": "Lýsing",
|
||||
|
||||
@@ -1147,7 +1147,7 @@
|
||||
"email": "E-mail",
|
||||
"email_error_msg": "E-mail non valida",
|
||||
"forgot_password": "Hai dimenticato la password?",
|
||||
"introduction": "Home Assistant Cloud fornisce una connessione remota sicura alla tua istanza quando sei lontano da casa. Consente inoltre di connettersi con i servizi cloud: Amazon Alexa e Google Assistant.",
|
||||
"introduction": "Home Assistant Cloud fornisce una connessione remota sicura alla tua istanza quando sei lontano da casa. Consente inoltre di connettersi con i servizi solo su cloud: Amazon Alexa e Google Assistant.",
|
||||
"introduction2": "Questo servizio è gestito dal nostro partner",
|
||||
"introduction2a": ", una società fondata dai fondatori di Home Assistant e Hass.io.",
|
||||
"introduction3": "Home Assistant Cloud è un servizio in abbonamento con un mese di prova gratuita. Non sono necessarie informazioni di pagamento.",
|
||||
@@ -1228,7 +1228,7 @@
|
||||
"picker": {
|
||||
"entity": "Entità",
|
||||
"header": "Personalizzazioni",
|
||||
"introduction": "Modificare gli attributi per entità. Le personalizzazioni aggiunte / modificate avranno effetto immediato. Le personalizzazioni rimosse avranno effetto quando l'entità viene aggiornata."
|
||||
"introduction": "Modificare gli attributi per entità. \nLe personalizzazioni aggiunte/modificate avranno effetto immediato. \nLe personalizzazioni rimosse avranno effetto quando l'entità sarà aggiornata."
|
||||
},
|
||||
"warning": {
|
||||
"include_link": "includere customize.yaml",
|
||||
@@ -1350,12 +1350,12 @@
|
||||
"caption": "Aiutanti",
|
||||
"description": "Elementi che possono aiutare a costruire le automazioni.",
|
||||
"dialog": {
|
||||
"add_helper": "Aggiungi aiuto",
|
||||
"add_helper": "Aggiungi aiutante",
|
||||
"add_platform": "Aggiungi {platform}",
|
||||
"create": "Crea"
|
||||
},
|
||||
"picker": {
|
||||
"add_helper": "Aggiungi aiuto",
|
||||
"add_helper": "Aggiungi aiutante",
|
||||
"headers": {
|
||||
"editable": "Modificabile",
|
||||
"entity_id": "ID Entità",
|
||||
@@ -1382,7 +1382,7 @@
|
||||
"frontend_version": "Versione Frontend: {version} - {type}",
|
||||
"home_assistant_logo": "Logo Home Assistant",
|
||||
"icons_by": "Icone di",
|
||||
"integrations": "integrazioni",
|
||||
"integrations": "Integrazioni",
|
||||
"issues": "Problemi",
|
||||
"license": "Pubblicato sotto la licenza Apache 2.0",
|
||||
"path_configuration": "Percorso del file configuration.yaml: {path}",
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "Il componente System Health non è caricato. Aggiungere 'system_health:' a configuration.yaml",
|
||||
"title": "Informazioni"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "pagina integrazioni",
|
||||
"missing_zha": "Manca il pannello di configurazione ZHA? È stato spostato alla voce ZHA nella {integrations_page}.",
|
||||
"missing_zwave": "Manca il pannello di configurazione di Z-Wave? È stato spostato alla voce Z-Wave nella {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Aggiungi integrazione",
|
||||
"caption": "Integrazioni",
|
||||
@@ -1427,7 +1432,7 @@
|
||||
"description": "Questo passaggio richiede di visitare un sito Web esterno per essere completato.",
|
||||
"open_site": "Apri sito Web"
|
||||
},
|
||||
"finish": "Finire",
|
||||
"finish": "Finito",
|
||||
"loading_first_time": "Si prega di attendere durante l'installazione dell'integrazione",
|
||||
"not_all_required_fields": "Non tutti i campi obbligatori sono compilati.",
|
||||
"submit": "Invia"
|
||||
@@ -1476,27 +1481,27 @@
|
||||
"title": "Registri"
|
||||
},
|
||||
"lovelace": {
|
||||
"caption": "Cruscotti Lovelace",
|
||||
"caption": "Plance di Lovelace",
|
||||
"dashboards": {
|
||||
"cant_edit_default": "Il cruscotto standard Lovelace non può essere modificato dall'Interfaccia Utente. È possibile nasconderlo impostando un altro cruscotto come predefinito.",
|
||||
"cant_edit_yaml": "I cruscotti definiti in YAML non possono essere modificati dall'Interfaccia Utente. Modificarli in configuration.yaml.",
|
||||
"caption": "Cruscotti",
|
||||
"cant_edit_default": "La plancia standard Lovelace non può essere modificata dall'Interfaccia Utente. È possibile nasconderla impostando un'altra plancia come predefinita.",
|
||||
"cant_edit_yaml": "Le plance definite in YAML non possono essere modificate dall'Interfaccia Utente. Modificarle in configuration.yaml.",
|
||||
"caption": "Plance",
|
||||
"conf_mode": {
|
||||
"storage": "IU controllata",
|
||||
"storage": "Controllata dell'Interfaccia Utente",
|
||||
"yaml": "File YAML"
|
||||
},
|
||||
"confirm_delete": "Sei sicuro di voler eliminare questo cruscotto?",
|
||||
"default_dashboard": "Questo è il cruscotto predefinito",
|
||||
"confirm_delete": "Sei sicuro di voler eliminare questa plancia?",
|
||||
"default_dashboard": "Questa è la plancia predefinita",
|
||||
"detail": {
|
||||
"create": "Crea",
|
||||
"delete": "Elimina",
|
||||
"dismiss": "Chiudi",
|
||||
"edit_dashboard": "Modifica cruscotto",
|
||||
"edit_dashboard": "Modifica plancia",
|
||||
"icon": "Icona",
|
||||
"new_dashboard": "Aggiungi nuovo cruscotto",
|
||||
"remove_default": "Rimuovi come predefinito su questo dispositivo",
|
||||
"new_dashboard": "Aggiungi nuova plancia",
|
||||
"remove_default": "Rimuovi come predefinita su questo dispositivo",
|
||||
"require_admin": "Solo per l'amministratore",
|
||||
"set_default": "Imposta come predefinito su questo dispositivo",
|
||||
"set_default": "Imposta come predefinita su questo dispositivo",
|
||||
"show_sidebar": "Mostra nella barra laterale",
|
||||
"title": "Titolo",
|
||||
"title_required": "È richiesto il titolo.",
|
||||
@@ -1505,10 +1510,10 @@
|
||||
"url_error_msg": "L'URL dovrebbe contenere un - e non può contenere spazi o caratteri speciali, ad eccezione di _ e -"
|
||||
},
|
||||
"picker": {
|
||||
"add_dashboard": "Aggiungi cruscotto",
|
||||
"add_dashboard": "Aggiungi plancia",
|
||||
"headers": {
|
||||
"conf_mode": "Metodo di configurazione",
|
||||
"default": "Predefinito",
|
||||
"default": "Predefinita",
|
||||
"filename": "Nome del file",
|
||||
"require_admin": "Solo per l'amministratore",
|
||||
"sidebar": "Mostra nella barra laterale",
|
||||
@@ -1517,7 +1522,7 @@
|
||||
"open": "Aprire"
|
||||
}
|
||||
},
|
||||
"description": "Configurare i cruscotti Lovelace",
|
||||
"description": "Configura le tue plance di Lovelace",
|
||||
"resources": {
|
||||
"cant_edit_yaml": "Si utilizza Lovelace in modalità YAML, pertanto non è possibile gestire le risorse tramite l'Interfaccia Utente. Gestirli in configuration.yaml.",
|
||||
"caption": "Risorse",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ascoltare un argomento",
|
||||
"description_publish": "Pubblicare un pacchetto",
|
||||
"listening_to": "Ascolto di",
|
||||
"message_received": "Messaggio {id} ricevuto su {topic} alle {time}:",
|
||||
"payload": "Payload (modello consentito)",
|
||||
"publish": "Pubblicare",
|
||||
"start_listening": "Inizia ad ascoltare",
|
||||
"stop_listening": "Interrompere l'ascolto",
|
||||
"subscribe_to": "Argomento a cui iscriversi",
|
||||
"title": "MQTT",
|
||||
"topic": "argomento"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Aggiungi persona",
|
||||
"caption": "Persone",
|
||||
@@ -1624,7 +1642,7 @@
|
||||
},
|
||||
"script": {
|
||||
"caption": "Script",
|
||||
"description": "Crea e modifica Script",
|
||||
"description": "Crea e modifica script",
|
||||
"editor": {
|
||||
"alias": "Nome",
|
||||
"default_name": "Nuovo script",
|
||||
@@ -1666,10 +1684,10 @@
|
||||
"input_select": "Ricarica input a discesa",
|
||||
"input_text": "Ricarica input testuali",
|
||||
"introduction": "Alcune parti di Home Assistant possono essere ricaricate senza richiedere un riavvio. Premendo su Ricarica si rimuoverà la loro Configurazione YAML attuale e si caricherà la versione aggiornata.",
|
||||
"person": "Ricarica persone",
|
||||
"person": "Ricarica le persone",
|
||||
"scene": "Ricarica le Scene",
|
||||
"script": "Ricarica gli Script",
|
||||
"zone": "Ricarica zone"
|
||||
"zone": "Ricarica le zone"
|
||||
},
|
||||
"server_management": {
|
||||
"confirm_restart": "Sei sicuro di voler riavviare Home Assistant?",
|
||||
@@ -1682,7 +1700,7 @@
|
||||
"validation": {
|
||||
"check_config": "Verifica Configurazione",
|
||||
"heading": "Convalida della configurazione",
|
||||
"introduction": "Convalidare la configurazione se di recente sono state apportate alcune modifiche alla configurazione e si desidera assicurarsi che sia tutto valido",
|
||||
"introduction": "Convalidare la configurazione se di recente sono state apportate alcune modifiche alla configurazione e ci si vuole assicurare che sia tutto valido",
|
||||
"invalid": "Configurazione non valida",
|
||||
"valid": "Configurazione valida!"
|
||||
}
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "Eventi",
|
||||
"type": "Tipo di Evento"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ascoltare un argomento",
|
||||
"description_publish": "Pubblicare un pacchetto",
|
||||
"listening_to": "Ascolto di",
|
||||
"message_received": "Messaggio {id} ricevuto su {topic} alle {time}:",
|
||||
"payload": "Payload (modello consentito)",
|
||||
"publish": "Pubblicare",
|
||||
"start_listening": "Inizia ad ascoltare",
|
||||
"stop_listening": "Interrompere l'ascolto",
|
||||
"subscribe_to": "Argomento a cui iscriversi",
|
||||
"title": "MQTT",
|
||||
"topic": "argomento"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Errore durante l'analisi di YAML: {data}",
|
||||
"call_service": "Chiama il Servizio",
|
||||
@@ -2077,7 +2082,7 @@
|
||||
}
|
||||
},
|
||||
"changed_toast": {
|
||||
"message": "La configurazione dell'Interfaccia Utente di Lovelace per questo cruscotto è stata aggiornata, ricaricare per vedere le modifiche?",
|
||||
"message": "La configurazione dell'Interfaccia Utente di Lovelace per questa plancia è stata aggiornata, ricaricare per vedere le modifiche?",
|
||||
"refresh": "Aggiorna"
|
||||
},
|
||||
"editor": {
|
||||
@@ -2312,14 +2317,14 @@
|
||||
"save_config": {
|
||||
"cancel": "Rinuncia",
|
||||
"close": "Chiudi",
|
||||
"empty_config": "Iniziare con un cruscotto vuoto",
|
||||
"empty_config": "Iniziare con una plancia vuota",
|
||||
"header": "Prendi il controllo della tua interfaccia utente di Lovelace",
|
||||
"para": "Questo cruscotto è attualmente gestito da Home Assistant. E' aggiornato automaticamente quando nuove entità o componenti dell'Interfaccia Utente Lovelace diventano disponibili. Se si assume il controllo, questo cruscotto non verrà più aggiornato automaticamente. È sempre possibile creare un nuovo cruscotto in configurazione con cui esperimentare.",
|
||||
"para": "Questa plancia è attualmente gestita da Home Assistant. E' aggiornata automaticamente quando nuove entità o componenti dell'Interfaccia Utente Lovelace diventano disponibili. Se si assume il controllo, questa plancia non verrà più aggiornata automaticamente. È sempre possibile creare una nuova plancia in configurazione con cui esperimentare.",
|
||||
"para_sure": "Sei sicuro di voler prendere il controllo della tua interfaccia utente?",
|
||||
"save": "Prendere il controllo",
|
||||
"yaml_config": "Per aiutarti a iniziare qui c'è la configurazione corrente di questo cruscotto:",
|
||||
"yaml_control": "Per assumere il controllo in modalità YAML, creare un file YAML con il nome specificato nella configurazione per questo cruscotto, o il predefinito 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Questo cruscotto sta utilizzando la modalità YAML, il che significa che non è possibile modificare la configurazione di Lovelace dall'Interfaccia Utente. Se volete gestire questo cruscotto dall'Interfaccia Utente, rimuovere 'mode: yaml' dalla configurazione di Lovelace in 'configuration.yaml'."
|
||||
"yaml_config": "Per aiutarti a iniziare qui c'è la configurazione attuale di questa plancia:",
|
||||
"yaml_control": "Per assumere il controllo in modalità YAML, creare un file YAML con il nome specificato nella tua configurazione per questa plancia, o il predefinito 'ui-lovelace.yaml'.",
|
||||
"yaml_mode": "Questa plancia sta utilizzando la modalità YAML, il che significa che non è possibile modificare la configurazione di Lovelace dall'Interfaccia Utente. Se volete gestire questa plancia dall'Interfaccia Utente, rimuovere 'mode: yaml' dalla configurazione di Lovelace in 'configuration.yaml'."
|
||||
},
|
||||
"suggest_card": {
|
||||
"add": "Aggiungi all'interfaccia utente di Lovelace",
|
||||
@@ -2529,7 +2534,7 @@
|
||||
"location_name_default": "Casa"
|
||||
},
|
||||
"integration": {
|
||||
"finish": "Finire",
|
||||
"finish": "Finito",
|
||||
"intro": "Dispositivi e servizi sono rappresentati in Home Assistant come integrazioni. È possibile impostarli ora, o farlo in seguito dalla schermata di configurazione.",
|
||||
"more_integrations": "Di Più"
|
||||
},
|
||||
@@ -2566,9 +2571,9 @@
|
||||
},
|
||||
"current_user": "Sei attualmente connesso come {fullName}.",
|
||||
"dashboard": {
|
||||
"description": "Scegliere un cruscotto di default per questo dispositivo.",
|
||||
"dropdown_label": "Cruscotto",
|
||||
"header": "Cruscotto"
|
||||
"description": "Scegliere una plancia di default per questo dispositivo.",
|
||||
"dropdown_label": "Plancia",
|
||||
"header": "Plancia"
|
||||
},
|
||||
"force_narrow": {
|
||||
"description": "Questo nasconderà la barra laterale per impostazione predefinita, in modo simile all'esperienza mobile",
|
||||
|
||||
@@ -981,6 +981,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "トピックをリッスン",
|
||||
"description_publish": "パケットをパブリッシュ",
|
||||
"listening_to": "リッスンします",
|
||||
"payload": "ペイロード (テンプレート可)",
|
||||
"publish": "パブリッシュ",
|
||||
"start_listening": "リッスンを開始",
|
||||
"stop_listening": "リッスンを停止",
|
||||
"subscribe_to": "サブスクライブするトピック",
|
||||
"title": "MQTT",
|
||||
"topic": "トピック"
|
||||
},
|
||||
"person": {
|
||||
"caption": "人",
|
||||
"description": "Home Assistant を追跡している人の管理。",
|
||||
@@ -1174,18 +1186,6 @@
|
||||
"title": "イベント",
|
||||
"type": "イベントの種類"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "トピックをリッスン",
|
||||
"description_publish": "パケットをパブリッシュ",
|
||||
"listening_to": "リッスンします",
|
||||
"payload": "ペイロード (テンプレート可)",
|
||||
"publish": "パブリッシュ",
|
||||
"start_listening": "リッスンを開始",
|
||||
"stop_listening": "リッスンを停止",
|
||||
"subscribe_to": "サブスクライブするトピック",
|
||||
"title": "MQTT",
|
||||
"topic": "トピック"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "YAMLの解析エラー: {error}",
|
||||
"call_service": "サービスを呼ぶ",
|
||||
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "시스템 상태보기 구성요소가 로드되지 않았습니다. configuration.yaml 에 'system_health:' 를 추가해주세요.",
|
||||
"title": "정보"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "통합 구성요소 페이지",
|
||||
"missing_zha": "ZHA 구성 패널이 보이지 않으신가요? {integrations_page} 의 ZHA 항목으로 이동되었습니다.",
|
||||
"missing_zwave": "Z-Wave 구성 패널이 보이지 않으신가요? {integrations_page} 의 ZHA 항목으로 이동되었습니다."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "통합 구성요소 추가",
|
||||
"caption": "통합 구성요소",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "토픽 내용 들어보기",
|
||||
"description_publish": "패킷 발행",
|
||||
"listening_to": "토픽 청취 중",
|
||||
"message_received": "{time} 에 {id} 메시지가 {topic} 에 수신되었습니다.",
|
||||
"payload": "페이로드 (템플릿 허용)",
|
||||
"publish": "발행",
|
||||
"start_listening": "청취 시작",
|
||||
"stop_listening": "그만 듣기",
|
||||
"subscribe_to": "청취할 토픽",
|
||||
"title": "MQTT",
|
||||
"topic": "토픽"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "구성원 추가하기",
|
||||
"caption": "구성원",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "이벤트",
|
||||
"type": "이벤트 유형"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "토픽 내용 들어보기",
|
||||
"description_publish": "패킷 발행",
|
||||
"listening_to": "토픽 청취 중",
|
||||
"message_received": "{time} 에 {id} 메시지가 {topic} 에 수신되었습니다.",
|
||||
"payload": "페이로드 (템플릿 허용)",
|
||||
"publish": "발행",
|
||||
"start_listening": "청취 시작",
|
||||
"stop_listening": "그만 듣기",
|
||||
"subscribe_to": "청취할 토픽",
|
||||
"title": "MQTT",
|
||||
"topic": "토픽"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "YAML 구문 분석 오류: {data}",
|
||||
"call_service": "서비스 호출",
|
||||
|
||||
@@ -480,6 +480,7 @@
|
||||
"delete": "Läschen",
|
||||
"error_required": "Erfuerderlech",
|
||||
"loading": "Lued",
|
||||
"menu": "Menu",
|
||||
"next": "Nächst",
|
||||
"no": "Nee",
|
||||
"previous": "Virdrun",
|
||||
@@ -911,6 +912,8 @@
|
||||
"introduction": "Benotzt Automatismen fir däin Haus zum Liewen ze bréngen",
|
||||
"load_error_not_editable": "Nëmmen Automatiounen am automations.yaml kënnen editéiert ginn.",
|
||||
"load_error_unknown": "Feeler beim luede vun der Automatioun ({err_no}).",
|
||||
"move_down": "No ënne réckelen",
|
||||
"move_up": "No uewe réckelen",
|
||||
"save": "Späicheren",
|
||||
"triggers": {
|
||||
"add": "Ausléiser dobäisetzen",
|
||||
@@ -1369,7 +1372,9 @@
|
||||
},
|
||||
"info": {
|
||||
"built_using": "Erstallt mat",
|
||||
"caption": "Info",
|
||||
"custom_uis": "Personaliséierte Benotzer Interface:",
|
||||
"description": "Informatioune zu denger Home Assistant Installation",
|
||||
"developed_by": "Entwéckelt vun enger ganzer Rei fantastesche Leit.",
|
||||
"documentation": "Dokumentatioun",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1385,6 +1390,11 @@
|
||||
"system_health_error": "System Gesondheet Komponent net gelueden. Setz 'system_health:' zur configuration.yaml dobäi",
|
||||
"title": "Info"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "Integratiouns Säit",
|
||||
"missing_zha": "Vermëss du ZHA Konfig. Tableau? Et ass op ZHA Entrée op der {integrations_page} geplënnert.",
|
||||
"missing_zwave": "Vermëss du Z-Wave Konfig. Tableau? Et ass op Z-Wave Entrée op der {integrations_page} geplënnert."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Integratioun dobäisetzen",
|
||||
"caption": "Integratiounen",
|
||||
@@ -1457,7 +1467,9 @@
|
||||
},
|
||||
"introduction": "Hei ass et méiglech är Komponenten vum Home Assistant ze konfiguréieren. Net alles ass méiglech fir iwwert den Interface anzestellen, mee mir schaffen drun.",
|
||||
"logs": {
|
||||
"caption": "Logbicher",
|
||||
"clear": "Läschen",
|
||||
"description": "Home Assistant Logbicher ukucken",
|
||||
"details": "Detailler vum Log ({level})",
|
||||
"load_full_log": "Kompletten Home Assistant Log lueden",
|
||||
"loading_log": "Feeler Log gëtt gelueden...",
|
||||
@@ -1544,6 +1556,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Sujet lauschteren",
|
||||
"description_publish": "Ee Pak publizéieren",
|
||||
"listening_to": "Lauschtert op",
|
||||
"message_received": "Noriicht {id} empfaangen am {topic} um {time}:",
|
||||
"payload": "Payload (Modell erlaabt)",
|
||||
"publish": "Publizéieren",
|
||||
"start_listening": "Fänk un mam lauschteren",
|
||||
"stop_listening": "Hal op mam lauschteren",
|
||||
"subscribe_to": "Sujet fir unzemellen",
|
||||
"title": "MQTT",
|
||||
"topic": "Sujet"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Persoun dobäisetzen",
|
||||
"caption": "Persounen",
|
||||
@@ -1715,6 +1740,7 @@
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "Apparater tauchen hei op soubaal se entdeckt sinn.",
|
||||
"discovery_text": "Entdeckten Apparater tauchen op dëser Platz op. Suivéiert d'Instruktiounen fir är Apparater an aktivéiert den Kupplung's Mod.",
|
||||
"header": "Zigbee Home Automation - Apparater dobäisetzen",
|
||||
"search_again": "Nach emol sichen",
|
||||
@@ -1724,6 +1750,7 @@
|
||||
"caption": "Apparater bäisetzen",
|
||||
"description": "Apparater am Zigbee Netzwierk bäisetzen"
|
||||
},
|
||||
"button": "Astellen",
|
||||
"caption": "ZHA",
|
||||
"cluster_attributes": {
|
||||
"attributes_of_cluster": "Attributer vum ausgewielten Cluster",
|
||||
@@ -1802,6 +1829,9 @@
|
||||
"header": "Verwaltung vum Netzwierk",
|
||||
"introduction": "Kommandoe mat Impakt op d'gesamt Netzwierk"
|
||||
},
|
||||
"network": {
|
||||
"caption": "Netzwierk"
|
||||
},
|
||||
"node_management": {
|
||||
"header": "Verwaltung vun den Apparaten",
|
||||
"help_node_dropdown": "Wielt een Apparat aus fir seng spezifesch Optioune ze gesinn.",
|
||||
@@ -1841,6 +1871,7 @@
|
||||
"no_zones_created_yet": "Et gesäit sou aus wéi wann nach keng Zone erstallt goufen."
|
||||
},
|
||||
"zwave": {
|
||||
"button": "Astellen",
|
||||
"caption": "Z-Wave",
|
||||
"common": {
|
||||
"index": "Index",
|
||||
@@ -1953,19 +1984,6 @@
|
||||
"title": "Evenementer",
|
||||
"type": "Typ vun Evenement"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Sujet lauschteren",
|
||||
"description_publish": "Ee Pak publizéieren",
|
||||
"listening_to": "Lauschtert op",
|
||||
"message_received": "Noriicht {id} empfaangen am {topic} um {time}:",
|
||||
"payload": "Payload (Modell erlaabt)",
|
||||
"publish": "Publizéieren",
|
||||
"start_listening": "Fänk un mam lauschteren",
|
||||
"stop_listening": "Hal op mam lauschteren",
|
||||
"subscribe_to": "Sujet fir unzemellen",
|
||||
"title": "MQTT",
|
||||
"topic": "Sujet"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Feeler beim Parse vum YAML: {data}",
|
||||
"call_service": "Service opruffen",
|
||||
|
||||
@@ -314,6 +314,9 @@
|
||||
"source": "Šaltinis",
|
||||
"zone": "Zona"
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
},
|
||||
"sun": {
|
||||
"event": "Ivykis"
|
||||
},
|
||||
@@ -379,6 +382,9 @@
|
||||
},
|
||||
"details": "Integravimo informacija"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Asmenys",
|
||||
"detail": {
|
||||
@@ -422,13 +428,6 @@
|
||||
"question_trust": "Ar pasitikite išoriniu skydeliu {name} adresu {link}?"
|
||||
}
|
||||
},
|
||||
"developer-tools": {
|
||||
"tabs": {
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
}
|
||||
}
|
||||
},
|
||||
"logbook": {
|
||||
"period": "Laikotarpis"
|
||||
},
|
||||
|
||||
@@ -1082,6 +1082,11 @@
|
||||
"clear": "Notīrīt",
|
||||
"refresh": "Atsvaidzināt"
|
||||
},
|
||||
"mqtt": {
|
||||
"publish": "Publicēt",
|
||||
"title": "MQTT",
|
||||
"topic": "temats"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Pievienot personu",
|
||||
"caption": "Personas",
|
||||
@@ -1355,11 +1360,6 @@
|
||||
"events": {
|
||||
"title": "Notikumi"
|
||||
},
|
||||
"mqtt": {
|
||||
"publish": "Publicēt",
|
||||
"title": "MQTT",
|
||||
"topic": "temats"
|
||||
},
|
||||
"services": {
|
||||
"column_description": "Apraksts",
|
||||
"column_example": "Piemērs",
|
||||
|
||||
@@ -956,7 +956,7 @@
|
||||
"start": ""
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "",
|
||||
"label": "MQTT",
|
||||
"payload": "Nyttelast (valgfritt)",
|
||||
"topic": "Emne"
|
||||
},
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "System tilstand komponenten er ikke lastet inn. Legg til 'system_health:' i configuration.yaml",
|
||||
"title": "Informasjon"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "integrasjonsside",
|
||||
"missing_zha": "Mangler ZHA-konfigurasjonspanelet? Den ble flyttet til ZHA-oppføringen på {integrations_page} .",
|
||||
"missing_zwave": "Mangler Z-Wave-konfigurasjonspanelet? Den ble flyttet til Z-Wave-oppføringen på {integrations_page} ."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Legg til integrasjon",
|
||||
"caption": "Integrasjoner",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Lytt til et emne",
|
||||
"description_publish": "Publiser en pakke",
|
||||
"listening_to": "Lytter til",
|
||||
"message_received": "Meldingen {id} ble mottatt på {topic} klokken {time}:",
|
||||
"payload": "Nyttelast (mal tillatt)",
|
||||
"publish": "Publiser",
|
||||
"start_listening": "Begynn å lytte",
|
||||
"stop_listening": "Slutt å lytte",
|
||||
"subscribe_to": "Emne å abonnere på",
|
||||
"title": "MQTT",
|
||||
"topic": "emne"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Legg til person",
|
||||
"caption": "Personer",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "Hendelser",
|
||||
"type": "Type hendelse"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Lytt til et emne",
|
||||
"description_publish": "Publiser en pakke",
|
||||
"listening_to": "Lytter til",
|
||||
"message_received": "Meldingen {id} ble mottatt på {topic} klokken {time}:",
|
||||
"payload": "Nyttelast (mal tillatt)",
|
||||
"publish": "Publiser",
|
||||
"start_listening": "Begynn å lytte",
|
||||
"stop_listening": "Slutt å lytte",
|
||||
"subscribe_to": "Emne å abonnere på",
|
||||
"title": "MQTT",
|
||||
"topic": "emne"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Feil ved parsing av YAML: {data}",
|
||||
"call_service": "Tilkall tjeneste",
|
||||
|
||||
@@ -956,7 +956,7 @@
|
||||
"start": "Opstarten"
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "",
|
||||
"label": "MQTT",
|
||||
"payload": "Payload (optioneel)",
|
||||
"topic": "Onderwerp"
|
||||
},
|
||||
@@ -1552,6 +1552,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Luisteren naar onderwerp",
|
||||
"description_publish": "Publiceer een pakket",
|
||||
"listening_to": "Luisteren naar",
|
||||
"message_received": "Bericht {id} ontvangen op {topic} om {time} :",
|
||||
"payload": "Payload (sjabloon toegestaan)",
|
||||
"publish": "Publiceer",
|
||||
"start_listening": "Begin te luisteren",
|
||||
"stop_listening": "Stop met luisteren",
|
||||
"subscribe_to": "Gebeurtenis om op te abonneren",
|
||||
"title": "MQTT",
|
||||
"topic": "onderwerp"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Persoon toevoegen",
|
||||
"caption": "Personen",
|
||||
@@ -1945,19 +1958,6 @@
|
||||
"title": "Gebeurtenissen",
|
||||
"type": "Type gebeurtenis"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Luisteren naar onderwerp",
|
||||
"description_publish": "Publiceer een pakket",
|
||||
"listening_to": "Luisteren naar",
|
||||
"message_received": "Bericht {id} ontvangen op {topic} om {time} :",
|
||||
"payload": "Payload (sjabloon toegestaan)",
|
||||
"publish": "Publiceer",
|
||||
"start_listening": "Begin te luisteren",
|
||||
"stop_listening": "Stop met luisteren",
|
||||
"subscribe_to": "Gebeurtenis om op te abonneren",
|
||||
"title": "MQTT",
|
||||
"topic": "onderwerp"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Fout bij het parseren van YAML: {data}",
|
||||
"call_service": "Aanroepen service",
|
||||
|
||||
@@ -1017,6 +1017,9 @@
|
||||
"logs": {
|
||||
"title": "Loggar"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Personar",
|
||||
"description": "Administrer personane Home Assistant sporer.",
|
||||
@@ -1238,9 +1241,6 @@
|
||||
"events": {
|
||||
"title": "Hendingar"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "Tenester"
|
||||
},
|
||||
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "Komponent kondycji systemu nie jest załadowany. Dodaj 'system_health:' do pliku configuration.yaml",
|
||||
"title": "Informacje"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "stronie integracji",
|
||||
"missing_zha": "Nie możesz znaleźć konfiguracji ZHA? Została ona przeniesiona do wpisu Z-Wave na {integrations_page}.",
|
||||
"missing_zwave": "Nie możesz znaleźć konfiguracji Z-Wave? Została ona przeniesiona do wpisu Z-Wave na {integrations_page}."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Dodaj integrację",
|
||||
"caption": "Integracje",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Nasłuch tematu",
|
||||
"description_publish": "Opublikuj pakiet",
|
||||
"listening_to": "Nasłuchiwanie...",
|
||||
"message_received": "Wiadomość {id} otrzymana w {topic} o godzinie {time}:",
|
||||
"payload": "Payload (z możliwością użycia szablonów)",
|
||||
"publish": "Opublikuj",
|
||||
"start_listening": "Rozpocznij nasłuch",
|
||||
"stop_listening": "Zatrzymaj nasłuch",
|
||||
"subscribe_to": "Temat do zasubskrybowania",
|
||||
"title": "MQTT",
|
||||
"topic": "temat"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Dodaj osobę",
|
||||
"caption": "Osoby",
|
||||
@@ -1661,7 +1679,7 @@
|
||||
"group": "Grupy",
|
||||
"heading": "Ponowne wczytanie konfiguracji",
|
||||
"input_boolean": "Pomocnicy typu przełącznik",
|
||||
"input_datetime": "Wczytaj",
|
||||
"input_datetime": "Pomocnicy typu data i czas",
|
||||
"input_number": "Pomocnicy typu numer",
|
||||
"input_select": "Pomocnicy typu pole wyboru",
|
||||
"input_text": "Pomocnicy typu tekst",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "Zdarzenia",
|
||||
"type": "Typ zdarzenia"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Nasłuch tematu",
|
||||
"description_publish": "Opublikuj pakiet",
|
||||
"listening_to": "Nasłuchiwanie...",
|
||||
"message_received": "Wiadomość {id} otrzymana w {topic} o godzinie {time}:",
|
||||
"payload": "Payload (z możliwością użycia szablonów)",
|
||||
"publish": "Opublikuj",
|
||||
"start_listening": "Rozpocznij nasłuch",
|
||||
"stop_listening": "Zatrzymaj nasłuch",
|
||||
"subscribe_to": "Temat do zasubskrybowania",
|
||||
"title": "MQTT",
|
||||
"topic": "temat"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Błąd parsowania YAML: {data}",
|
||||
"call_service": "Wywołaj usługę",
|
||||
|
||||
@@ -767,6 +767,7 @@
|
||||
},
|
||||
"description": "Visão geral de todas as áreas da sua casa.",
|
||||
"editor": {
|
||||
"area_id": "ID da Área",
|
||||
"create": "Criar",
|
||||
"default_name": "Nova Zona",
|
||||
"delete": "Excluir",
|
||||
@@ -910,6 +911,8 @@
|
||||
"introduction": "Use automações para trazer vida à sua casa",
|
||||
"load_error_not_editable": "Somente automações em automations.yaml são editáveis.",
|
||||
"load_error_unknown": "Erro ao carregar a automação ({err_no}).",
|
||||
"move_down": "Mover para baixo",
|
||||
"move_up": "Mover para cima",
|
||||
"save": "Salvar",
|
||||
"triggers": {
|
||||
"add": "Adicionar gatilho",
|
||||
@@ -951,7 +954,7 @@
|
||||
"start": "Iniciar"
|
||||
},
|
||||
"mqtt": {
|
||||
"label": "MQTT",
|
||||
"label": "",
|
||||
"payload": "Valor (opcional)",
|
||||
"topic": "Tópico"
|
||||
},
|
||||
@@ -1368,6 +1371,7 @@
|
||||
},
|
||||
"info": {
|
||||
"built_using": "Construído usando",
|
||||
"caption": "Informações",
|
||||
"custom_uis": "UIs personalizadas:",
|
||||
"developed_by": "Desenvolvido por um monte de pessoas incríveis.",
|
||||
"documentation": "Documentação",
|
||||
@@ -1384,6 +1388,9 @@
|
||||
"system_health_error": "O componente System Health não foi carregado. Adicione 'system_health:' ao configuration.yaml",
|
||||
"title": "Info"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "Página de integrações"
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Adicionar integração",
|
||||
"caption": "Integrações",
|
||||
@@ -1456,6 +1463,7 @@
|
||||
},
|
||||
"introduction": "Aqui é possível configurar seus componentes e Home Assistant. Nem tudo é possível configurar via UI, mas estamos trabalhando nisso.",
|
||||
"logs": {
|
||||
"caption": "Logs",
|
||||
"clear": "Limpar",
|
||||
"details": "Detalhes do log ({Level})",
|
||||
"load_full_log": "Carregar todos os logs do Home Assistant",
|
||||
@@ -1543,6 +1551,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ouvir um tópico",
|
||||
"description_publish": "Publicar um pacote",
|
||||
"listening_to": "Ouvindo",
|
||||
"message_received": "Mensagem {id} recebida em {topic} às {time}:",
|
||||
"payload": "Valor (template permitido)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Começar a ouvir",
|
||||
"stop_listening": "Parar de ouvir",
|
||||
"subscribe_to": "Evento para se inscrever",
|
||||
"title": "",
|
||||
"topic": "tópico"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Adicionar pessoa",
|
||||
"caption": "Pessoas",
|
||||
@@ -1713,8 +1734,10 @@
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "Os dispositivos descobertos aparecerão aqui.",
|
||||
"discovery_text": "Dispositivos descobertos serão exibidos aqui. Siga as instruções para o(s) seu(s) dispositivo(s) e coloque o(s) dispositivo(s) no modo de emparelhamento.",
|
||||
"header": "Zigbee Home Automation - Adicionar dispositivos",
|
||||
"pairing_mode": "Certifique-se de que seus dispositivos estão em modo de pareamento. Verifique as instruções do seu dispositivo para saber como fazer isso.",
|
||||
"search_again": "Pesquisar novamente",
|
||||
"spinner": "Procurando por dispositivos ZHA Zigbee…"
|
||||
},
|
||||
@@ -1722,6 +1745,7 @@
|
||||
"caption": "Adicionar Dispositivos",
|
||||
"description": "Adicionar dispositivos à rede Zigbee"
|
||||
},
|
||||
"button": "Configurar",
|
||||
"caption": "ZHA",
|
||||
"cluster_attributes": {
|
||||
"attributes_of_cluster": "Atributos do cluster selecionado",
|
||||
@@ -1800,6 +1824,9 @@
|
||||
"header": "Gerenciamento de Rede",
|
||||
"introduction": "Comandos que afetam toda a rede"
|
||||
},
|
||||
"network": {
|
||||
"caption": "Rede"
|
||||
},
|
||||
"node_management": {
|
||||
"header": "Gerenciamento de Dispositivos",
|
||||
"help_node_dropdown": "Selecione um dispositivo para visualizar as opções por dispositivo.",
|
||||
@@ -1839,6 +1866,7 @@
|
||||
"no_zones_created_yet": "Parece que você ainda não criou nenhuma zona."
|
||||
},
|
||||
"zwave": {
|
||||
"button": "Configurar",
|
||||
"caption": "",
|
||||
"common": {
|
||||
"index": "Índice",
|
||||
@@ -1883,6 +1911,7 @@
|
||||
"ozw_log": {
|
||||
"header": "OZW Log",
|
||||
"introduction": "Veja o log. 0 é o mínimo (carrega o log inteiro) e 1000 é o máximo. A carga mostrará um log estático e tail será atualizada automaticamente com o último número especificado de linhas do log.",
|
||||
"last_log_lines": "Número da última linhas de log",
|
||||
"load": "Carregar"
|
||||
},
|
||||
"services": {
|
||||
@@ -1890,9 +1919,12 @@
|
||||
"add_node_secure": "Adicionar Nó Seguro",
|
||||
"cancel_command": "Cancelar Comando",
|
||||
"heal_network": "Reparar rede",
|
||||
"heal_node": "Repara nó",
|
||||
"node_info": "Informações do Nó",
|
||||
"print_node": "Imprimir nó",
|
||||
"refresh_entity": "Atualizar Entidade",
|
||||
"remove_node": "Remover Nó",
|
||||
"replace_failed_node": "Substituir Nó com Falha",
|
||||
"save_config": "Salvar Configuração",
|
||||
"soft_reset": "Soft Reset",
|
||||
"start_network": "Iniciar Rede",
|
||||
@@ -1932,19 +1964,6 @@
|
||||
"title": "Eventos",
|
||||
"type": "Tipo de evento"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ouvir um tópico",
|
||||
"description_publish": "Publicar um pacote",
|
||||
"listening_to": "Ouvindo",
|
||||
"message_received": "Mensagem {id} recebida em {topic} às {time}:",
|
||||
"payload": "Valor (template permitido)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Começar a ouvir",
|
||||
"stop_listening": "Parar de ouvir",
|
||||
"subscribe_to": "Evento para se inscrever",
|
||||
"title": "",
|
||||
"topic": "tópico"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Erro ao analisar o YAML: {data}",
|
||||
"call_service": "Iniciar Serviço",
|
||||
|
||||
@@ -1542,6 +1542,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ouvir um tópico",
|
||||
"description_publish": "Publicar um pacote",
|
||||
"listening_to": "A escutar",
|
||||
"message_received": "Mensagem {id} recebida em {topic} às {time} :",
|
||||
"payload": "Payload (é permitido template)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Começar a escutar",
|
||||
"stop_listening": "Parar de escutar",
|
||||
"subscribe_to": "Tópico ao qual subscrever",
|
||||
"title": "MQTT",
|
||||
"topic": "tópico"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Adicionar Pessoa",
|
||||
"caption": "Pessoas",
|
||||
@@ -1925,19 +1938,6 @@
|
||||
"title": "Eventos",
|
||||
"type": "Tipo de Evento"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ouvir um tópico",
|
||||
"description_publish": "Publicar um pacote",
|
||||
"listening_to": "A escutar",
|
||||
"message_received": "Mensagem {id} recebida em {topic} às {time} :",
|
||||
"payload": "Payload (é permitido template)",
|
||||
"publish": "Publicar",
|
||||
"start_listening": "Começar a escutar",
|
||||
"stop_listening": "Parar de escutar",
|
||||
"subscribe_to": "Tópico ao qual subscrever",
|
||||
"title": "MQTT",
|
||||
"topic": "tópico"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Erro na análise de YAML: {data}",
|
||||
"call_service": "Chamar serviço",
|
||||
|
||||
@@ -1331,6 +1331,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ascultă un subiect",
|
||||
"description_publish": "Publică un pachet",
|
||||
"listening_to": "Ascultand",
|
||||
"message_received": "Mesajul {id} primit pe {topic} la {time} :",
|
||||
"payload": "Sarcină utilă (șablon permis)",
|
||||
"publish": "Publică",
|
||||
"start_listening": "Începe ascultare",
|
||||
"stop_listening": "Nu mai asculta",
|
||||
"subscribe_to": "Topic la care să vă abonați",
|
||||
"title": "MQTT",
|
||||
"topic": "subiect"
|
||||
},
|
||||
"person": {
|
||||
"caption": "Persoane",
|
||||
"description": "Gestionează persoanele pe care Home Assistant le urmărește.",
|
||||
@@ -1687,19 +1700,6 @@
|
||||
"title": "Evenimente",
|
||||
"type": "Tip eveniment"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Ascultă un subiect",
|
||||
"description_publish": "Publică un pachet",
|
||||
"listening_to": "Ascultand",
|
||||
"message_received": "Mesajul {id} primit pe {topic} la {time} :",
|
||||
"payload": "Sarcină utilă (șablon permis)",
|
||||
"publish": "Publică",
|
||||
"start_listening": "Începe ascultare",
|
||||
"stop_listening": "Nu mai asculta",
|
||||
"subscribe_to": "Topic la care să vă abonați",
|
||||
"title": "MQTT",
|
||||
"topic": "subiect"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Eroare de parsare YAML: {date}",
|
||||
"call_service": "Apelare serviciu",
|
||||
|
||||
@@ -1391,6 +1391,11 @@
|
||||
"system_health_error": "Компонент System Health не загружен. Добавьте 'system_health:' в файл configuration.yaml.",
|
||||
"title": "О системе"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "странице интеграций",
|
||||
"missing_zha": "Отсутствует панель конфигурации ZHA? Настройки ZHA теперь находятся на {integrations_page} в карточке ZHA.",
|
||||
"missing_zwave": "Отсутствует панель конфигурации Z-Wave? Настройки Z-Wave теперь находятся на {integrations_page} в карточке Z-Wave."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Добавить интеграцию",
|
||||
"caption": "Интеграции",
|
||||
@@ -1552,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Подписаться на топик",
|
||||
"description_publish": "Опубликовать данные",
|
||||
"listening_to": "Подписано на",
|
||||
"message_received": "Сообщение {id} получено в {time} из {topic}:",
|
||||
"payload": "Значение (включая шаблоны)",
|
||||
"publish": "Опубликовать",
|
||||
"start_listening": "Подписаться",
|
||||
"stop_listening": "Отписаться",
|
||||
"subscribe_to": "Топик",
|
||||
"title": "MQTT",
|
||||
"topic": "Топик"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Добавить персону",
|
||||
"caption": "Люди",
|
||||
@@ -1974,19 +1992,6 @@
|
||||
"title": "События",
|
||||
"type": "Событие"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Подписаться на топик",
|
||||
"description_publish": "Опубликовать данные",
|
||||
"listening_to": "Подписано на",
|
||||
"message_received": "Сообщение {id} получено в {time} из {topic}:",
|
||||
"payload": "Значение (включая шаблоны)",
|
||||
"publish": "Опубликовать",
|
||||
"start_listening": "Подписаться",
|
||||
"stop_listening": "Отписаться",
|
||||
"subscribe_to": "Топик",
|
||||
"title": "MQTT",
|
||||
"topic": "Топик"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Ошибка при разборе синтаксиса YAML: {data}",
|
||||
"call_service": "Вызвать службу",
|
||||
|
||||
@@ -1448,6 +1448,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Počúvať tému",
|
||||
"description_publish": "Publikovať paket",
|
||||
"listening_to": "Počúvam",
|
||||
"message_received": "Správa {id} prijatá v {topic} o {time} :",
|
||||
"payload": "Obsah (šablóny sú povolené)",
|
||||
"publish": "Publikovať",
|
||||
"start_listening": "Začať počúvať",
|
||||
"stop_listening": "Zastaviť počúvanie",
|
||||
"subscribe_to": "Téma na odber",
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Pridať osobu",
|
||||
"caption": "Osoby",
|
||||
@@ -1791,19 +1804,6 @@
|
||||
"title": "Udalosti",
|
||||
"type": "Typ udalosti"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Počúvať tému",
|
||||
"description_publish": "Publikovať paket",
|
||||
"listening_to": "Počúvam",
|
||||
"message_received": "Správa {id} prijatá v {topic} o {time} :",
|
||||
"payload": "Obsah (šablóny sú povolené)",
|
||||
"publish": "Publikovať",
|
||||
"start_listening": "Začať počúvať",
|
||||
"stop_listening": "Zastaviť počúvanie",
|
||||
"subscribe_to": "Téma na odber",
|
||||
"title": "MQTT",
|
||||
"topic": "téma"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Chyba pri analýze YAML: {data}",
|
||||
"call_service": "Zavolať službu",
|
||||
|
||||
@@ -480,8 +480,10 @@
|
||||
"delete": "Izbriši",
|
||||
"error_required": "Zahtevano",
|
||||
"loading": "Nalaganje",
|
||||
"menu": "Meni",
|
||||
"next": "Naslednji",
|
||||
"no": "Ne",
|
||||
"overflow_menu": "Prelivni meni",
|
||||
"previous": "Prejšnji",
|
||||
"refresh": "Osveži",
|
||||
"save": "Shrani",
|
||||
@@ -692,10 +694,10 @@
|
||||
},
|
||||
"zha_device_info": {
|
||||
"buttons": {
|
||||
"add": "Dodajte naprave",
|
||||
"add": "Dodajte naprave prek te naprave",
|
||||
"reconfigure": "Ponovno konfigurirajte napravo",
|
||||
"remove": "Odstranite napravo",
|
||||
"zigbee_information": "Zigbee Informacije"
|
||||
"zigbee_information": "Podpis naprave Zigbee"
|
||||
},
|
||||
"confirmations": {
|
||||
"remove": "Ali ste prepričani, da želite odstraniti napravo?"
|
||||
@@ -715,7 +717,7 @@
|
||||
"unknown": "Neznano",
|
||||
"zha_device_card": {
|
||||
"area_picker_label": "Območje",
|
||||
"device_name_placeholder": "Ime, ki ga je dodelil uporabnik",
|
||||
"device_name_placeholder": "Spremenite ime naprave",
|
||||
"update_name_button": "Posodobi ime"
|
||||
}
|
||||
}
|
||||
@@ -911,6 +913,8 @@
|
||||
"introduction": "Uporabite avtomatizacije za oživitev vašega doma.",
|
||||
"load_error_not_editable": "Urejati je mogoče le avtomatizacije v automations.yaml.",
|
||||
"load_error_unknown": "Napaka pri nalaganju avtomatizacije ({err_no}).",
|
||||
"move_down": "Premakni navzdol",
|
||||
"move_up": "Premakni navzgor",
|
||||
"save": "Shrani",
|
||||
"triggers": {
|
||||
"add": "Dodaj sprožilec",
|
||||
@@ -1369,7 +1373,9 @@
|
||||
},
|
||||
"info": {
|
||||
"built_using": "Zgrajen z uporabo",
|
||||
"caption": "Info",
|
||||
"custom_uis": "Uporabniški vmesniki po meri:",
|
||||
"description": "Informacije o vaši namestitvi programa Home Assistant",
|
||||
"developed_by": "Razvija ga kup osupljivih ljudi.",
|
||||
"documentation": "Dokumentacija",
|
||||
"frontend": "frontend-ui",
|
||||
@@ -1385,6 +1391,11 @@
|
||||
"system_health_error": "Komponenta \"system health\" ni naložena. Dodajte \"system_health:\" v svoj configuration.yaml",
|
||||
"title": "Info"
|
||||
},
|
||||
"integration_panel_move": {
|
||||
"link_integration_page": "Stran za integracije",
|
||||
"missing_zha": "Ali manjka konfiguracijska plošča ZHA? Premaknjen je bil v vnos ZHA na {integrations_page} .",
|
||||
"missing_zwave": "Ali manjka konfiguracijska plošča Z-Wave? Premaknili so ga v vnos Z-Wave na {integrations_page} ."
|
||||
},
|
||||
"integrations": {
|
||||
"add_integration": "Dodaj integracijo",
|
||||
"caption": "Integracije",
|
||||
@@ -1457,7 +1468,9 @@
|
||||
},
|
||||
"introduction": "Tukaj je mogoče konfigurirati vaše komponente in Home Assistanta. Vsega ni mogoče konfigurirati iz uporabniškega vmesnika (vendar delamo na tem).",
|
||||
"logs": {
|
||||
"caption": "Dnevniki",
|
||||
"clear": "Počisti",
|
||||
"description": "Oglejte si Home Assistant dnevnike",
|
||||
"details": "Podrobnosti dnevnika ({level})",
|
||||
"load_full_log": "Naloži celoten dnevnik Home Assistant-a",
|
||||
"loading_log": "Nalaganje dnevnika napak ...",
|
||||
@@ -1544,6 +1557,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Poslušajte temi",
|
||||
"description_publish": "Objavi paket",
|
||||
"listening_to": "Poslušanje",
|
||||
"message_received": "Sporočilo {id} prejeto v {topic} ob {time}:",
|
||||
"payload": "Tovor (predloga je dovoljena)",
|
||||
"publish": "Objavi",
|
||||
"start_listening": "Začnite poslušati",
|
||||
"stop_listening": "Nehajte poslušati",
|
||||
"subscribe_to": "Tema, na katero se lahko naročite",
|
||||
"title": "MQTT",
|
||||
"topic": "tema"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Dodaj osebo",
|
||||
"caption": "Osebe",
|
||||
@@ -1652,6 +1678,11 @@
|
||||
"core": "Ponovno naloži lokacijo in prilagoditve",
|
||||
"group": "Ponovno naloži skupine",
|
||||
"heading": "Ponovno nalaganje konfiguracije YAML",
|
||||
"input_boolean": "Ponovno naloži \"input booleans\"",
|
||||
"input_datetime": "Ponovno naloži vhodne datumske čase",
|
||||
"input_number": "Ponovno naloži vhodne številke",
|
||||
"input_select": "Ponovno naloži izbirne vnose",
|
||||
"input_text": "Ponovno naloži vhodna besedila",
|
||||
"introduction": "Nekateri deli programa Home Assistant-a se lahko naložijo brez ponovnega zagona. S ponovnim nalaganjem se trenutna konfiguracija YAML zamenja in naloži nova.",
|
||||
"person": "Ponovno naloži osebe",
|
||||
"scene": "Ponovno naloži scene",
|
||||
@@ -1715,8 +1746,11 @@
|
||||
},
|
||||
"zha": {
|
||||
"add_device_page": {
|
||||
"discovered_text": "Naprave se bodo prikazale tukaj, ko jih odkrijemo.",
|
||||
"discovery_text": "Tukaj bodo prikazane odkrite naprave. Sledite navodilom za napravo in jo postavite v način seznanjanja.",
|
||||
"header": "Zigbee Home Automation - Dodaj naprave",
|
||||
"no_devices_found": "Najdene ni bilo nobene naprave, preverite, ali so v načinu združevanje ter jih držite budne medtem, ko je v odkrivanje v teku.",
|
||||
"pairing_mode": "Prepričajte se, da so vaše naprave v načinu združevanja. Preverite navodila svoje naprave, kako to storiti.",
|
||||
"search_again": "Ponovno iskanje",
|
||||
"spinner": "Iskanje ZHA Zigbee naprav..."
|
||||
},
|
||||
@@ -1724,6 +1758,7 @@
|
||||
"caption": "Dodajte naprave",
|
||||
"description": "Dodajte naprave v omrežje Zigbee"
|
||||
},
|
||||
"button": "Konfiguriraj",
|
||||
"caption": "ZHA",
|
||||
"cluster_attributes": {
|
||||
"attributes_of_cluster": "Atributi izbrane gruče",
|
||||
@@ -1802,6 +1837,9 @@
|
||||
"header": "Upravljanje omrežja",
|
||||
"introduction": "Ukazi, ki vplivajo na celotno omrežje"
|
||||
},
|
||||
"network": {
|
||||
"caption": "Omrežje"
|
||||
},
|
||||
"node_management": {
|
||||
"header": "Upravljanje naprav",
|
||||
"help_node_dropdown": "Izberite napravo za ogled njenih možnosti.",
|
||||
@@ -1841,6 +1879,7 @@
|
||||
"no_zones_created_yet": "Izgleda, da še niste ustvarili nobenih con."
|
||||
},
|
||||
"zwave": {
|
||||
"button": "Konfiguriraj",
|
||||
"caption": "Z-Wave",
|
||||
"common": {
|
||||
"index": "Indeks",
|
||||
@@ -1953,19 +1992,6 @@
|
||||
"title": "Dogodki",
|
||||
"type": "Vrsta dogodka"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Poslušajte temi",
|
||||
"description_publish": "Objavi paket",
|
||||
"listening_to": "Poslušanje",
|
||||
"message_received": "Sporočilo {id} prejeto v {topic} ob {time}:",
|
||||
"payload": "Tovor (predloga je dovoljena)",
|
||||
"publish": "Objavi",
|
||||
"start_listening": "Začnite poslušati",
|
||||
"stop_listening": "Nehajte poslušati",
|
||||
"subscribe_to": "Tema, na katero se lahko naročite",
|
||||
"title": "MQTT",
|
||||
"topic": "tema"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Napaka pri razčlenjevanju YAML-a: {data}",
|
||||
"call_service": "Kliči Storitev",
|
||||
|
||||
@@ -75,6 +75,9 @@
|
||||
"editor": {
|
||||
"triggers": {
|
||||
"type": {
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
},
|
||||
"numeric_state": {
|
||||
"above": "Iznad",
|
||||
"below": "Ispod",
|
||||
@@ -95,19 +98,15 @@
|
||||
"header": "Entiteter"
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"zwave": {
|
||||
"caption": "Z-Wave",
|
||||
"node_config": {
|
||||
"set_config_parameter": "Подесите параметар Цонфиг"
|
||||
}
|
||||
}
|
||||
},
|
||||
"developer-tools": {
|
||||
"tabs": {
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,12 @@
|
||||
"automation": {
|
||||
"editor": {
|
||||
"triggers": {
|
||||
"learn_more": "Сазнајте више о окидачима"
|
||||
"learn_more": "Сазнајте више о окидачима",
|
||||
"type": {
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"picker": {
|
||||
@@ -75,6 +80,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"users": {
|
||||
"add_user": {
|
||||
"caption": "Додај корисника",
|
||||
@@ -94,13 +102,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"developer-tools": {
|
||||
"tabs": {
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
}
|
||||
}
|
||||
},
|
||||
"lovelace": {
|
||||
"cards": {
|
||||
"picture-elements": {
|
||||
|
||||
@@ -1552,6 +1552,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Lyssna på ett ämne",
|
||||
"description_publish": "Publicera ett paket",
|
||||
"listening_to": "Lyssnar på",
|
||||
"message_received": "Meddelande {id} mottaget på {topic} vid {time} :",
|
||||
"payload": "Payload (mall tillåten)",
|
||||
"publish": "Publicera",
|
||||
"start_listening": "Börja lyssna",
|
||||
"stop_listening": "Sluta lyssna",
|
||||
"subscribe_to": "Ämne att prenumerera på",
|
||||
"title": "MQTT",
|
||||
"topic": "ämne"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Lägg till person",
|
||||
"caption": "Personer",
|
||||
@@ -1974,19 +1987,6 @@
|
||||
"title": "Händelser",
|
||||
"type": "Händelsetyp"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Lyssna på ett ämne",
|
||||
"description_publish": "Publicera ett paket",
|
||||
"listening_to": "Lyssnar på",
|
||||
"message_received": "Meddelande {id} mottaget på {topic} vid {time} :",
|
||||
"payload": "Payload (mall tillåten)",
|
||||
"publish": "Publicera",
|
||||
"start_listening": "Börja lyssna",
|
||||
"stop_listening": "Sluta lyssna",
|
||||
"subscribe_to": "Ämne att prenumerera på",
|
||||
"title": "MQTT",
|
||||
"topic": "ämne"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "Fel vid tolkning av YAML: {data}",
|
||||
"call_service": "Anropa tjänst",
|
||||
|
||||
@@ -237,19 +237,26 @@
|
||||
},
|
||||
"panel": {
|
||||
"config": {
|
||||
"automation": {
|
||||
"editor": {
|
||||
"triggers": {
|
||||
"type": {
|
||||
"mqtt": {
|
||||
"label": "MQTT"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"zwave": {
|
||||
"caption": "Z-Wave",
|
||||
"node_config": {
|
||||
"set_config_parameter": "கட்டமைப்பு அளவுருவை அமைக்கவும்"
|
||||
}
|
||||
}
|
||||
},
|
||||
"developer-tools": {
|
||||
"tabs": {
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -476,6 +476,9 @@
|
||||
"caption": "మార్పులు చేర్పులు"
|
||||
},
|
||||
"header": "కాన్ఫిగర్ Home Assistant",
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"script": {
|
||||
"caption": "స్క్రిప్ట్",
|
||||
"description": "స్క్రిప్ట్లను సృష్టించండి మరియు సవరించండి"
|
||||
@@ -499,9 +502,6 @@
|
||||
"events": {
|
||||
"title": "సంఘటనలు"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "సేవలు"
|
||||
},
|
||||
|
||||
@@ -836,6 +836,9 @@
|
||||
"none": "ยังไม่มีการกำหนดค่าใดๆ เลย"
|
||||
},
|
||||
"introduction": "ดูสิ! สามารถกำหนดค่าส่วนประกอบต่างๆ ของคุณได้ด้วย รวมถึงส่วนของระบบของ Home Assistant เลยเชียวนะ! ถึงแม้ตอนนี้ส่วนการแสดงผลยังทำไม่ได้ก็ตาม แต่เรากำลังพัฒนามันอยู่ คงจะใช้ได้เร็วๆ นี้ละ",
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"person": {
|
||||
"caption": "บุคคล",
|
||||
"description": "จัดการบุคคลที่ระบบจะทำการติดตาม",
|
||||
@@ -933,9 +936,6 @@
|
||||
"events": {
|
||||
"title": "เหตุการณ์"
|
||||
},
|
||||
"mqtt": {
|
||||
"title": "MQTT"
|
||||
},
|
||||
"services": {
|
||||
"title": "บริการ"
|
||||
},
|
||||
|
||||
@@ -1476,6 +1476,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Bir konuyu dinle",
|
||||
"description_publish": "Bir paket yayınla",
|
||||
"listening_to": "Dinliyorum",
|
||||
"payload": "Yük (şablona izin verilir)",
|
||||
"publish": "Yayınla",
|
||||
"start_listening": "Dinlemeye başla",
|
||||
"stop_listening": "Dinlemeyi bırak",
|
||||
"subscribe_to": "Abone olunacak konu",
|
||||
"title": "MQTT",
|
||||
"topic": "konu"
|
||||
},
|
||||
"person": {
|
||||
"add_person": "Kişi ekle",
|
||||
"caption": "Kişiler",
|
||||
@@ -1812,18 +1824,6 @@
|
||||
"title": "Olaylar",
|
||||
"type": "Olay Türü"
|
||||
},
|
||||
"mqtt": {
|
||||
"description_listen": "Bir konuyu dinle",
|
||||
"description_publish": "Bir paket yayınla",
|
||||
"listening_to": "Dinliyorum",
|
||||
"payload": "Yük (şablona izin verilir)",
|
||||
"publish": "Yayınla",
|
||||
"start_listening": "Dinlemeye başla",
|
||||
"stop_listening": "Dinlemeyi bırak",
|
||||
"subscribe_to": "Abone olunacak konu",
|
||||
"title": "MQTT",
|
||||
"topic": "konu"
|
||||
},
|
||||
"services": {
|
||||
"alert_parsing_yaml": "YAML alınamadı: {data}",
|
||||
"call_service": "Arama Servisi",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user