diff --git a/src/components/ha-state-icon.ts b/src/components/ha-state-icon.ts index 5ec0a4a95a..062da21637 100644 --- a/src/components/ha-state-icon.ts +++ b/src/components/ha-state-icon.ts @@ -17,10 +17,12 @@ export class HaStateIcon extends LitElement { @property() public icon?: string; protected render() { - if (this.icon || this.stateObj?.attributes.icon) { - return html``; + const overrideIcon = + this.icon || + (this.stateObj && this.hass?.entities[this.stateObj.entity_id]?.icon) || + this.stateObj?.attributes.icon; + if (overrideIcon) { + return html``; } if (!this.stateObj) { return nothing; diff --git a/src/data/entity_registry.ts b/src/data/entity_registry.ts index 61da5aba2a..791f95ac8b 100644 --- a/src/data/entity_registry.ts +++ b/src/data/entity_registry.ts @@ -15,6 +15,7 @@ type entityCategory = "config" | "diagnostic"; export interface EntityRegistryDisplayEntry { entity_id: string; name?: string; + icon?: string; device_id?: string; area_id?: string; hidden?: boolean; @@ -31,6 +32,7 @@ export interface EntityRegistryDisplayEntryResponse { ai?: string; ec?: number; en?: string; + ic?: string; pl?: string; tk?: string; hb?: boolean; diff --git a/src/data/icons.ts b/src/data/icons.ts index dfa090207e..544ce8f25d 100644 --- a/src/data/icons.ts +++ b/src/data/icons.ts @@ -75,6 +75,9 @@ export const entityIcon = async (hass: HomeAssistant, state: HassEntity) => { let icon: string | undefined; const domain = computeStateDomain(state); const entity = hass.entities?.[state.entity_id]; + if (entity?.icon) { + return entity.icon; + } if (entity?.translation_key && entity.platform) { const platformIcons = await getPlatformIcons(hass, entity.platform); if (platformIcons) { diff --git a/src/state/connection-mixin.ts b/src/state/connection-mixin.ts index fe61742a7a..8179aa3dc2 100644 --- a/src/state/connection-mixin.ts +++ b/src/state/connection-mixin.ts @@ -239,6 +239,7 @@ export const connectionMixin = >( ? entityReg.entity_categories[entity.ec] : undefined, name: entity.en, + icon: entity.ic, hidden: entity.hb, display_precision: entity.dp, };