mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-21 16:26:43 +00:00
Move MQTT dev tools to integrations (#6189)
This commit is contained in:
parent
d8f530f8ac
commit
ed0e8c5e8d
@ -8,15 +8,18 @@ import {
|
|||||||
property,
|
property,
|
||||||
TemplateResult,
|
TemplateResult,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { computeStateName } from "../../common/entity/compute_state_name";
|
import { computeStateName } from "../../../../../../common/entity/compute_state_name";
|
||||||
import "../../components/ha-dialog";
|
import "../../../../../../components/ha-dialog";
|
||||||
import "../../components/ha-switch";
|
import "../../../../../../components/ha-switch";
|
||||||
import "../../components/ha-formfield";
|
import "../../../../../../components/ha-formfield";
|
||||||
import type { HaSwitch } from "../../components/ha-switch";
|
import type { HaSwitch } from "../../../../../../components/ha-switch";
|
||||||
import { computeDeviceName } from "../../data/device_registry";
|
import { computeDeviceName } from "../../../../../../data/device_registry";
|
||||||
import { fetchMQTTDebugInfo, MQTTDeviceDebugInfo } from "../../data/mqtt";
|
import {
|
||||||
import { haStyleDialog } from "../../resources/styles";
|
fetchMQTTDebugInfo,
|
||||||
import { HomeAssistant } from "../../types";
|
MQTTDeviceDebugInfo,
|
||||||
|
} from "../../../../../../data/mqtt";
|
||||||
|
import { haStyleDialog } from "../../../../../../resources/styles";
|
||||||
|
import { HomeAssistant } from "../../../../../../types";
|
||||||
import "./mqtt-discovery-payload";
|
import "./mqtt-discovery-payload";
|
||||||
import "./mqtt-messages";
|
import "./mqtt-messages";
|
||||||
import { MQTTDeviceDebugInfoDialogParams } from "./show-dialog-mqtt-device-debug-info";
|
import { MQTTDeviceDebugInfoDialogParams } from "./show-dialog-mqtt-device-debug-info";
|
||||||
@ -187,19 +190,19 @@ class DialogMQTTDeviceDebugInfo extends LitElement {
|
|||||||
<li class="triggerlistitem">
|
<li class="triggerlistitem">
|
||||||
MQTT discovery data:
|
MQTT discovery data:
|
||||||
<ul class="discoverydata">
|
<ul class="discoverydata">
|
||||||
<li>
|
<li>
|
||||||
Topic:
|
Topic:
|
||||||
<code>${trigger.discovery_data.topic}</code>
|
<code>${trigger.discovery_data.topic}</code>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<mqtt-discovery-payload
|
<mqtt-discovery-payload
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
.payload=${trigger.discovery_data.payload}
|
.payload=${trigger.discovery_data.payload}
|
||||||
.showAsYaml=${this._showAsYaml}
|
.showAsYaml=${this._showAsYaml}
|
||||||
.summary=${"Payload"}
|
.summary=${"Payload"}
|
||||||
>
|
>
|
||||||
</li>
|
</mqtt-discovery-payload>
|
||||||
</mqtt-discovery-payload>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
`
|
`
|
@ -7,12 +7,12 @@ import {
|
|||||||
TemplateResult,
|
TemplateResult,
|
||||||
css,
|
css,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
|
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||||
import { removeMQTTDeviceEntry } from "../../../../../data/mqtt";
|
import { removeMQTTDeviceEntry } from "../../../../../../data/mqtt";
|
||||||
import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box";
|
import { showConfirmationDialog } from "../../../../../../dialogs/generic/show-dialog-box";
|
||||||
import { showMQTTDeviceDebugInfoDialog } from "../../../../../dialogs/mqtt-device-debug-info-dialog/show-dialog-mqtt-device-debug-info";
|
import { showMQTTDeviceDebugInfoDialog } from "./show-dialog-mqtt-device-debug-info";
|
||||||
import { haStyle } from "../../../../../resources/styles";
|
import { haStyle } from "../../../../../../resources/styles";
|
||||||
import { HomeAssistant } from "../../../../../types";
|
import { HomeAssistant } from "../../../../../../types";
|
||||||
|
|
||||||
@customElement("ha-device-actions-mqtt")
|
@customElement("ha-device-actions-mqtt")
|
||||||
export class HaDeviceActionsMqtt extends LitElement {
|
export class HaDeviceActionsMqtt extends LitElement {
|
@ -9,9 +9,9 @@ import {
|
|||||||
TemplateResult,
|
TemplateResult,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { classMap } from "lit-html/directives/class-map";
|
import { classMap } from "lit-html/directives/class-map";
|
||||||
import { formatTimeWithSeconds } from "../../common/datetime/format_time";
|
import { formatTimeWithSeconds } from "../../../../../../common/datetime/format_time";
|
||||||
import { HomeAssistant } from "../../types";
|
import { HomeAssistant } from "../../../../../../types";
|
||||||
import { MQTTMessage } from "../../data/mqtt";
|
import { MQTTMessage } from "../../../../../../data/mqtt";
|
||||||
|
|
||||||
@customElement("mqtt-messages")
|
@customElement("mqtt-messages")
|
||||||
class MQTTMessages extends LitElement {
|
class MQTTMessages extends LitElement {
|
@ -1,5 +1,5 @@
|
|||||||
import { fireEvent } from "../../common/dom/fire_event";
|
import { fireEvent } from "../../../../../../common/dom/fire_event";
|
||||||
import { DeviceRegistryEntry } from "../../data/device_registry";
|
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||||
|
|
||||||
export interface MQTTDeviceDebugInfoDialogParams {
|
export interface MQTTDeviceDebugInfoDialogParams {
|
||||||
device: DeviceRegistryEntry;
|
device: DeviceRegistryEntry;
|
@ -8,17 +8,17 @@ import {
|
|||||||
css,
|
css,
|
||||||
PropertyValues,
|
PropertyValues,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
|
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||||
import { haStyle } from "../../../../../resources/styles";
|
import { haStyle } from "../../../../../../resources/styles";
|
||||||
import { HomeAssistant } from "../../../../../types";
|
import { HomeAssistant } from "../../../../../../types";
|
||||||
import {
|
import {
|
||||||
ZHADevice,
|
ZHADevice,
|
||||||
fetchZHADevice,
|
fetchZHADevice,
|
||||||
reconfigureNode,
|
reconfigureNode,
|
||||||
} from "../../../../../data/zha";
|
} from "../../../../../../data/zha";
|
||||||
import { navigate } from "../../../../../common/navigate";
|
import { navigate } from "../../../../../../common/navigate";
|
||||||
import { showZHADeviceZigbeeInfoDialog } from "../../../../../dialogs/zha-device-zigbee-signature-dialog/show-dialog-zha-device-zigbee-info";
|
import { showZHADeviceZigbeeInfoDialog } from "../../../../../../dialogs/zha-device-zigbee-signature-dialog/show-dialog-zha-device-zigbee-info";
|
||||||
import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box";
|
import { showConfirmationDialog } from "../../../../../../dialogs/generic/show-dialog-box";
|
||||||
|
|
||||||
@customElement("ha-device-actions-zha")
|
@customElement("ha-device-actions-zha")
|
||||||
export class HaDeviceActionsZha extends LitElement {
|
export class HaDeviceActionsZha extends LitElement {
|
@ -8,11 +8,11 @@ import {
|
|||||||
css,
|
css,
|
||||||
PropertyValues,
|
PropertyValues,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { DeviceRegistryEntry } from "../../../../../data/device_registry";
|
import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
|
||||||
import { haStyle } from "../../../../../resources/styles";
|
import { haStyle } from "../../../../../../resources/styles";
|
||||||
import { HomeAssistant } from "../../../../../types";
|
import { HomeAssistant } from "../../../../../../types";
|
||||||
import { ZHADevice, fetchZHADevice } from "../../../../../data/zha";
|
import { ZHADevice, fetchZHADevice } from "../../../../../../data/zha";
|
||||||
import { formatAsPaddedHex } from "../../../integrations/integration-panels/zha/functions";
|
import { formatAsPaddedHex } from "../../../../integrations/integration-panels/zha/functions";
|
||||||
|
|
||||||
@customElement("ha-device-info-zha")
|
@customElement("ha-device-info-zha")
|
||||||
export class HaDeviceActionsZha extends LitElement {
|
export class HaDeviceActionsZha extends LitElement {
|
@ -477,7 +477,9 @@ export class HaConfigDevicePage extends LitElement {
|
|||||||
): TemplateResult[] {
|
): TemplateResult[] {
|
||||||
const templates: TemplateResult[] = [];
|
const templates: TemplateResult[] = [];
|
||||||
if (integrations.includes("mqtt")) {
|
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`
|
templates.push(html`
|
||||||
<div class="card-actions" slot="actions">
|
<div class="card-actions" slot="actions">
|
||||||
<ha-device-actions-mqtt
|
<ha-device-actions-mqtt
|
||||||
@ -488,8 +490,8 @@ export class HaConfigDevicePage extends LitElement {
|
|||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
if (integrations.includes("zha")) {
|
if (integrations.includes("zha")) {
|
||||||
import("./device-detail/integration-elements/ha-device-actions-zha");
|
import("./device-detail/integration-elements/zha/ha-device-actions-zha");
|
||||||
import("./device-detail/integration-elements/ha-device-info-zha");
|
import("./device-detail/integration-elements/zha/ha-device-info-zha");
|
||||||
templates.push(html`
|
templates.push(html`
|
||||||
<ha-device-info-zha
|
<ha-device-info-zha
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
|
@ -323,6 +323,13 @@ class HaPanelConfig extends HassRouterPage {
|
|||||||
/* webpackChunkName: "panel-config-zwave" */ "./integrations/integration-panels/zwave/ha-config-zwave"
|
/* 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 = {
|
const integrationsWithPanel = {
|
||||||
|
mqtt: {
|
||||||
|
buttonLocalizeKey: "ui.panel.config.mqtt.button",
|
||||||
|
path: "/config/mqtt",
|
||||||
|
},
|
||||||
zha: {
|
zha: {
|
||||||
buttonLocalizeKey: "ui.panel.config.zha.button",
|
buttonLocalizeKey: "ui.panel.config.zha.button",
|
||||||
path: "/config/zha/dashboard",
|
path: "/config/zha/dashboard",
|
||||||
|
@ -9,13 +9,14 @@ import {
|
|||||||
property,
|
property,
|
||||||
TemplateResult,
|
TemplateResult,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import "../../../components/ha-card";
|
import "../../../../../components/ha-card";
|
||||||
import "../../../components/ha-code-editor";
|
import "../../../../../components/ha-code-editor";
|
||||||
import { haStyle } from "../../../resources/styles";
|
import { haStyle } from "../../../../../resources/styles";
|
||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../../../types";
|
||||||
import "./mqtt-subscribe-card";
|
import "./mqtt-subscribe-card";
|
||||||
|
import "../../../../../layouts/hass-subpage";
|
||||||
|
|
||||||
@customElement("developer-tools-mqtt")
|
@customElement("mqtt-config-panel")
|
||||||
class HaPanelDevMqtt extends LitElement {
|
class HaPanelDevMqtt extends LitElement {
|
||||||
@property() public hass!: HomeAssistant;
|
@property() public hass!: HomeAssistant;
|
||||||
|
|
||||||
@ -37,43 +38,41 @@ class HaPanelDevMqtt extends LitElement {
|
|||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
return html`
|
return html`
|
||||||
<div class="content">
|
<hass-subpage>
|
||||||
<ha-card
|
<div class="content">
|
||||||
header="${this.hass.localize(
|
<ha-card
|
||||||
"ui.panel.developer-tools.tabs.mqtt.description_publish"
|
header="${this.hass.localize(
|
||||||
)}"
|
"ui.panel.config.mqtt.description_publish"
|
||||||
>
|
)}"
|
||||||
<div class="card-content">
|
>
|
||||||
<paper-input
|
<div class="card-content">
|
||||||
label="${this.hass.localize(
|
<paper-input
|
||||||
"ui.panel.developer-tools.tabs.mqtt.topic"
|
label="${this.hass.localize("ui.panel.config.mqtt.topic")}"
|
||||||
)}"
|
.value=${this.topic}
|
||||||
.value=${this.topic}
|
@value-changed=${this._handleTopic}
|
||||||
@value-changed=${this._handleTopic}
|
></paper-input>
|
||||||
></paper-input>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
${this.hass.localize(
|
${this.hass.localize("ui.panel.config.mqtt.payload")}
|
||||||
"ui.panel.developer-tools.tabs.mqtt.payload"
|
</p>
|
||||||
)}
|
<ha-code-editor
|
||||||
</p>
|
mode="jinja2"
|
||||||
<ha-code-editor
|
.value="${this.payload}"
|
||||||
mode="jinja2"
|
@value-changed=${this._handlePayload}
|
||||||
.value="${this.payload}"
|
></ha-code-editor>
|
||||||
@value-changed=${this._handlePayload}
|
</div>
|
||||||
></ha-code-editor>
|
<div class="card-actions">
|
||||||
</div>
|
<mwc-button @click=${this._publish}
|
||||||
<div class="card-actions">
|
>${this.hass.localize(
|
||||||
<mwc-button @click=${this._publish}
|
"ui.panel.config.mqtt.publish"
|
||||||
>${this.hass.localize(
|
)}</mwc-button
|
||||||
"ui.panel.developer-tools.tabs.mqtt.publish"
|
>
|
||||||
)}</mwc-button
|
</div>
|
||||||
>
|
</ha-card>
|
||||||
</div>
|
|
||||||
</ha-card>
|
|
||||||
|
|
||||||
<mqtt-subscribe-card .hass=${this.hass}></mqtt-subscribe-card>
|
<mqtt-subscribe-card .hass=${this.hass}></mqtt-subscribe-card>
|
||||||
</div>
|
</div>
|
||||||
|
</hass-subpage>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
@ -9,10 +9,10 @@ import {
|
|||||||
property,
|
property,
|
||||||
TemplateResult,
|
TemplateResult,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { formatTime } from "../../../common/datetime/format_time";
|
import { formatTime } from "../../../../../common/datetime/format_time";
|
||||||
import "../../../components/ha-card";
|
import "../../../../../components/ha-card";
|
||||||
import { MQTTMessage, subscribeMQTTTopic } from "../../../data/mqtt";
|
import { MQTTMessage, subscribeMQTTTopic } from "../../../../../data/mqtt";
|
||||||
import { HomeAssistant } from "../../../types";
|
import { HomeAssistant } from "../../../../../types";
|
||||||
|
|
||||||
@customElement("mqtt-subscribe-card")
|
@customElement("mqtt-subscribe-card")
|
||||||
class MqttSubscribeCard extends LitElement {
|
class MqttSubscribeCard extends LitElement {
|
||||||
@ -43,18 +43,14 @@ class MqttSubscribeCard extends LitElement {
|
|||||||
return html`
|
return html`
|
||||||
<ha-card
|
<ha-card
|
||||||
header="${this.hass.localize(
|
header="${this.hass.localize(
|
||||||
"ui.panel.developer-tools.tabs.mqtt.description_listen"
|
"ui.panel.config.mqtt.description_listen"
|
||||||
)}"
|
)}"
|
||||||
>
|
>
|
||||||
<form>
|
<form>
|
||||||
<paper-input
|
<paper-input
|
||||||
.label=${this._subscribed
|
.label=${this._subscribed
|
||||||
? this.hass.localize(
|
? this.hass.localize("ui.panel.config.mqtt.listening_to")
|
||||||
"ui.panel.developer-tools.tabs.mqtt.listening_to"
|
: this.hass.localize("ui.panel.config.mqtt.subscribe_to")}
|
||||||
)
|
|
||||||
: this.hass.localize(
|
|
||||||
"ui.panel.developer-tools.tabs.mqtt.subscribe_to"
|
|
||||||
)}
|
|
||||||
.disabled=${this._subscribed !== undefined}
|
.disabled=${this._subscribed !== undefined}
|
||||||
.value=${this._topic}
|
.value=${this._topic}
|
||||||
@value-changed=${this._valueChanged}
|
@value-changed=${this._valueChanged}
|
||||||
@ -65,12 +61,8 @@ class MqttSubscribeCard extends LitElement {
|
|||||||
type="submit"
|
type="submit"
|
||||||
>
|
>
|
||||||
${this._subscribed
|
${this._subscribed
|
||||||
? this.hass.localize(
|
? this.hass.localize("ui.panel.config.mqtt.stop_listening")
|
||||||
"ui.panel.developer-tools.tabs.mqtt.stop_listening"
|
: this.hass.localize("ui.panel.config.mqtt.start_listening")}
|
||||||
)
|
|
||||||
: this.hass.localize(
|
|
||||||
"ui.panel.developer-tools.tabs.mqtt.start_listening"
|
|
||||||
)}
|
|
||||||
</mwc-button>
|
</mwc-button>
|
||||||
</form>
|
</form>
|
||||||
<div class="events">
|
<div class="events">
|
||||||
@ -78,7 +70,7 @@ class MqttSubscribeCard extends LitElement {
|
|||||||
(msg) => html`
|
(msg) => html`
|
||||||
<div class="event">
|
<div class="event">
|
||||||
${this.hass.localize(
|
${this.hass.localize(
|
||||||
"ui.panel.developer-tools.tabs.mqtt.message_received",
|
"ui.panel.config.mqtt.message_received",
|
||||||
"id",
|
"id",
|
||||||
msg.id,
|
msg.id,
|
||||||
"topic",
|
"topic",
|
@ -38,6 +38,10 @@ class HaConfigZwave extends LocalizeMixin(EventsMixin(PolymerElement)) {
|
|||||||
static get template() {
|
static get template() {
|
||||||
return html`
|
return html`
|
||||||
<style include="iron-flex ha-style ha-form-style">
|
<style include="iron-flex ha-style ha-form-style">
|
||||||
|
app-toolbar {
|
||||||
|
border-bottom: 1px solid var(--divider-color);
|
||||||
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,6 @@ class DeveloperToolsRouter extends HassRouterPage {
|
|||||||
tag: "developer-tools-event",
|
tag: "developer-tools-event",
|
||||||
load: () => import("./event/developer-tools-event"),
|
load: () => import("./event/developer-tools-event"),
|
||||||
},
|
},
|
||||||
mqtt: {
|
|
||||||
tag: "developer-tools-mqtt",
|
|
||||||
load: () => import("./mqtt/developer-tools-mqtt"),
|
|
||||||
},
|
|
||||||
service: {
|
service: {
|
||||||
tag: "developer-tools-service",
|
tag: "developer-tools-service",
|
||||||
load: () => import("./service/developer-tools-service"),
|
load: () => import("./service/developer-tools-service"),
|
||||||
|
@ -13,7 +13,6 @@ import {
|
|||||||
property,
|
property,
|
||||||
TemplateResult,
|
TemplateResult,
|
||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { isComponentLoaded } from "../../common/config/is_component_loaded";
|
|
||||||
import scrollToTarget from "../../common/dom/scroll-to-target";
|
import scrollToTarget from "../../common/dom/scroll-to-target";
|
||||||
import { navigate } from "../../common/navigate";
|
import { navigate } from "../../common/navigate";
|
||||||
import "../../components/ha-menu-button";
|
import "../../components/ha-menu-button";
|
||||||
@ -72,15 +71,6 @@ class PanelDeveloperTools extends LitElement {
|
|||||||
"ui.panel.developer-tools.tabs.events.title"
|
"ui.panel.developer-tools.tabs.events.title"
|
||||||
)}
|
)}
|
||||||
</paper-tab>
|
</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>
|
</paper-tabs>
|
||||||
</app-header>
|
</app-header>
|
||||||
<developer-tools-router
|
<developer-tools-router
|
||||||
|
@ -1506,6 +1506,20 @@
|
|||||||
"create": "Create"
|
"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": {
|
"zha": {
|
||||||
"button": "Configure",
|
"button": "Configure",
|
||||||
"header": "Configure Zigbee Home Automation",
|
"header": "Configure Zigbee Home Automation",
|
||||||
@ -2299,19 +2313,6 @@
|
|||||||
"alert_event_type": "Event type is a mandatory field",
|
"alert_event_type": "Event type is a mandatory field",
|
||||||
"notification_event_fired": "Event {type} successful fired!"
|
"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": {
|
"services": {
|
||||||
"title": "Services",
|
"title": "Services",
|
||||||
"description": "The service dev tool allows you to call any available service in Home Assistant.",
|
"description": "The service dev tool allows you to call any available service in Home Assistant.",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user