From 5e9ae36577250c885598c0fa9cf90565c78ff90f Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 24 Jan 2023 12:14:21 +0100 Subject: [PATCH] Fetch number units from core (#15175) --- src/data/number.ts | 12 +++++++++++ .../entities/entity-registry-settings.ts | 20 +++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 src/data/number.ts diff --git a/src/data/number.ts b/src/data/number.ts new file mode 100644 index 0000000000..6f90f612cd --- /dev/null +++ b/src/data/number.ts @@ -0,0 +1,12 @@ +import { HomeAssistant } from "../types"; + +export type NumberDeviceClassUnits = { units: string[] }; + +export const getNumberDeviceClassConvertibleUnits = ( + hass: HomeAssistant, + deviceClass: string +): Promise => + hass.callWS({ + type: "number/device_class_convertible_units", + device_class: deviceClass, + }); diff --git a/src/panels/config/entities/entity-registry-settings.ts b/src/panels/config/entities/entity-registry-settings.ts index ada104fef0..0abb81988c 100644 --- a/src/panels/config/entities/entity-registry-settings.ts +++ b/src/panels/config/entities/entity-registry-settings.ts @@ -67,6 +67,7 @@ import { updateEntityRegistryEntry, } from "../../../data/entity_registry"; import { domainToName } from "../../../data/integration"; +import { getNumberDeviceClassConvertibleUnits } from "../../../data/number"; import { getSensorDeviceClassConvertibleUnits } from "../../../data/sensor"; import { showOptionsFlowDialog } from "../../../dialogs/config-flow/show-dialog-options-flow"; import { @@ -114,10 +115,6 @@ const OVERRIDE_DEVICE_CLASSES = { ], }; -const OVERRIDE_NUMBER_UNITS = { - temperature: ["°C", "°F", "K"], -}; - const OVERRIDE_WEATHER_UNITS = { precipitation: ["mm", "in"], pressure: ["hPa", "mbar", "mmHg", "inHg"], @@ -172,6 +169,8 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @state() private _cameraPrefs?: CameraPreferences; + @state() private _numberDeviceClassConvertibleUnits?: string[]; + @state() private _sensorDeviceClassConvertibleUnits?: string[]; private _origEntityId!: string; @@ -281,6 +280,15 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { if (changedProps.has("_deviceClass")) { const domain = computeDomain(this.entry.entity_id); + if (domain === "number" && this._deviceClass) { + const { units } = await getNumberDeviceClassConvertibleUnits( + this.hass, + this._deviceClass + ); + this._numberDeviceClassConvertibleUnits = units; + } else { + this._numberDeviceClassConvertibleUnits = []; + } if (domain === "sensor" && this._deviceClass) { const { units } = await getSensorDeviceClassConvertibleUnits( this.hass, @@ -412,7 +420,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { ${domain === "number" && this._deviceClass && stateObj?.attributes.unit_of_measurement && - OVERRIDE_NUMBER_UNITS[this._deviceClass]?.includes( + this._numberDeviceClassConvertibleUnits?.includes( stateObj?.attributes.unit_of_measurement ) ? html` @@ -426,7 +434,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @selected=${this._unitChanged} @closed=${stopPropagation} > - ${OVERRIDE_NUMBER_UNITS[this._deviceClass].map( + ${this._numberDeviceClassConvertibleUnits.map( (unit: string) => html` ${unit} `