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,
};