diff --git a/src/components/buttons/ha-call-service-button.ts b/src/components/buttons/ha-call-service-button.ts
index 3cea93de0d94..3fc835e14a38 100644
--- a/src/components/buttons/ha-call-service-button.ts
+++ b/src/components/buttons/ha-call-service-button.ts
@@ -1,5 +1,6 @@
import { LitElement, TemplateResult, html } from "lit";
import { customElement, property } from "lit/decorators";
+import { HassServiceTarget } from "home-assistant-js-websocket";
import { showConfirmationDialog } from "../../dialogs/generic/show-dialog-box";
import "./ha-progress-button";
import { HomeAssistant } from "../../types";
@@ -17,7 +18,9 @@ class HaCallServiceButton extends LitElement {
@property() public service!: string;
- @property({ type: Object }) public serviceData = {};
+ @property({ type: Object }) public target!: HassServiceTarget;
+
+ @property({ type: Object }) public data = {};
@property() public confirmation?;
@@ -39,7 +42,8 @@ class HaCallServiceButton extends LitElement {
const eventData = {
domain: this.domain,
service: this.service,
- serviceData: this.serviceData,
+ data: this.data,
+ target: this.target,
success: false,
};
@@ -47,7 +51,12 @@ class HaCallServiceButton extends LitElement {
this.shadowRoot!.querySelector("ha-progress-button")!;
try {
- await this.hass.callService(this.domain, this.service, this.serviceData);
+ await this.hass.callService(
+ this.domain,
+ this.service,
+ this.data,
+ this.target
+ );
this.progress = false;
progressElement.actionSuccess();
eventData.success = true;
@@ -85,7 +94,8 @@ declare global {
"hass-service-called": {
domain: string;
service: string;
- serviceData: object;
+ target: HassServiceTarget;
+ data: object;
success: boolean;
};
}
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-cluster-attributes.ts b/src/panels/config/integrations/integration-panels/zha/zha-cluster-attributes.ts
index e3462fd69ec2..9b628d469961 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-cluster-attributes.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-cluster-attributes.ts
@@ -134,7 +134,7 @@ export class ZHAClusterAttributes extends LitElement {
.hass=${this.hass}
domain="zha"
service="set_zigbee_cluster_attribute"
- .serviceData=${this._setAttributeServiceData}
+ .data=${this._setAttributeServiceData}
>
${this.hass!.localize(
"ui.panel.config.zha.cluster_attributes.write_zigbee_attribute"
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-cluster-commands.ts b/src/panels/config/integrations/integration-panels/zha/zha-cluster-commands.ts
index d6932b10ff30..4ea3417261b6 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-cluster-commands.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-cluster-commands.ts
@@ -115,7 +115,7 @@ export class ZHAClusterCommands extends LitElement {
.hass=${this.hass}
domain="zha"
service="issue_zigbee_cluster_command"
- .serviceData=${this._issueClusterCommandServiceData}
+ .data=${this._issueClusterCommandServiceData}
.disabled=${!this._canIssueCommand}
>
${this.hass!.localize(
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts b/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts
index 695a9bd9dca9..78a0ae9ef448 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts
@@ -6,7 +6,6 @@ import { fireEvent } from "../../../../../common/dom/fire_event";
import { computeStateName } from "../../../../../common/entity/compute_state_name";
import { stringCompare } from "../../../../../common/string/compare";
import { slugify } from "../../../../../common/string/slugify";
-import "../../../../../components/buttons/ha-call-service-button";
import "../../../../../components/entity/state-badge";
import "../../../../../components/ha-area-picker";
import "../../../../../components/ha-card";
diff --git a/src/panels/lovelace/elements/hui-service-button-element.ts b/src/panels/lovelace/elements/hui-service-button-element.ts
index 91c8abcb75f6..418758540dcb 100644
--- a/src/panels/lovelace/elements/hui-service-button-element.ts
+++ b/src/panels/lovelace/elements/hui-service-button-element.ts
@@ -40,12 +40,23 @@ export class HuiServiceButtonElement
return nothing;
}
+ const { entity_id, label_id, floor_id, device_id, area_id } =
+ this._config.service_data ?? {};
+ const updatedTarget = this._config.target ?? {
+ entity_id,
+ label_id,
+ floor_id,
+ device_id,
+ area_id,
+ };
+
return html`
${this._config.title}
`;
diff --git a/src/panels/lovelace/elements/types.ts b/src/panels/lovelace/elements/types.ts
index 2cddae5721d6..35b2c453a8a6 100644
--- a/src/panels/lovelace/elements/types.ts
+++ b/src/panels/lovelace/elements/types.ts
@@ -1,3 +1,4 @@
+import { HassServiceTarget } from "home-assistant-js-websocket";
import { ActionConfig } from "../../../data/lovelace/config/action";
import { HomeAssistant } from "../../../types";
import { Condition } from "../common/validate-condition";
@@ -56,7 +57,10 @@ export interface ImageElementConfig extends LovelaceElementConfigBase {
export interface ServiceButtonElementConfig extends LovelaceElementConfigBase {
title?: string;
service?: string;
+ target?: HassServiceTarget;
+ // "service_data" is kept for backwards compatibility. Replaced by "data".
service_data?: Record;
+ data?: Record;
}
export interface StateBadgeElementConfig extends LovelaceElementConfigBase {