diff --git a/src/data/entity_registry.ts b/src/data/entity_registry.ts index 4c7a931d0f..77d9d00d8e 100644 --- a/src/data/entity_registry.ts +++ b/src/data/entity_registry.ts @@ -37,6 +37,10 @@ export interface SensorEntityOptions { unit_of_measurement?: string | null; } +export interface NumberEntityOptions { + unit_of_measurement?: string | null; +} + export interface WeatherEntityOptions { precipitation_unit?: string | null; pressure_unit?: string | null; diff --git a/src/panels/config/entities/entity-registry-settings.ts b/src/panels/config/entities/entity-registry-settings.ts index 799d221004..02c59f09b8 100644 --- a/src/panels/config/entities/entity-registry-settings.ts +++ b/src/panels/config/entities/entity-registry-settings.ts @@ -105,6 +105,10 @@ const OVERRIDE_DEVICE_CLASSES = { ], }; +const OVERRIDE_NUMBER_UNITS = { + temperature: ["°C", "°F", "K"], +}; + const OVERRIDE_SENSOR_UNITS = { temperature: ["°C", "°F", "K"], pressure: ["hPa", "Pa", "kPa", "bar", "cbar", "mbar", "mmHg", "inHg", "psi"], @@ -235,7 +239,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { } } - if (domain === "sensor") { + if (domain === "number" || domain === "sensor") { const stateObj: HassEntity | undefined = this.hass.states[this.entry.entity_id]; this._unit_of_measurement = stateObj?.attributes?.unit_of_measurement; @@ -361,6 +365,31 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { ` : ""} + ${domain === "number" && + this._deviceClass && + stateObj?.attributes.unit_of_measurement && + OVERRIDE_NUMBER_UNITS[this._deviceClass]?.includes( + stateObj?.attributes.unit_of_measurement + ) + ? html` + + ${OVERRIDE_NUMBER_UNITS[this._deviceClass].map( + (unit: string) => html` + ${unit} + ` + )} + + ` + : ""} ${domain === "sensor" && this._deviceClass && stateObj?.attributes.unit_of_measurement && @@ -861,10 +890,10 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { params.hidden_by = this._hiddenBy; } if ( - domain === "sensor" && + (domain === "number" || domain === "number") && stateObj?.attributes?.unit_of_measurement !== this._unit_of_measurement ) { - params.options_domain = "sensor"; + params.options_domain = domain; params.options = { unit_of_measurement: this._unit_of_measurement }; } if (