From 4a9ec7233d48d61bab21a65ca1d5430f34fd04bf Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 1 Mar 2023 11:24:48 +0100 Subject: [PATCH] Fetch weather units from core (#15212) --- src/data/weather.ts | 15 ++++++++ .../entities/entity-registry-settings.ts | 34 ++++++++++++------- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/data/weather.ts b/src/data/weather.ts index fe64a4ff8a..619240354d 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -523,3 +523,18 @@ export const isForecastHourly = ( return undefined; }; + +export type WeatherUnits = { + precipitation_unit: string[]; + pressure_unit: string[]; + temperature_unit: string[]; + visibility_unit: string[]; + wind_speed_unit: string[]; +}; + +export const getWeatherConvertibleUnits = ( + hass: HomeAssistant +): Promise<{ units: WeatherUnits }> => + hass.callWS({ + type: "weather/convertible_units", + }); diff --git a/src/panels/config/entities/entity-registry-settings.ts b/src/panels/config/entities/entity-registry-settings.ts index 980d3de909..272dfa2d5b 100644 --- a/src/panels/config/entities/entity-registry-settings.ts +++ b/src/panels/config/entities/entity-registry-settings.ts @@ -72,6 +72,10 @@ import { import { domainToName } from "../../../data/integration"; import { getNumberDeviceClassConvertibleUnits } from "../../../data/number"; import { getSensorDeviceClassConvertibleUnits } from "../../../data/sensor"; +import { + WeatherUnits, + getWeatherConvertibleUnits, +} from "../../../data/weather"; import { showAliasesDialog } from "../../../dialogs/aliases/show-dialog-aliases"; import { showOptionsFlowDialog } from "../../../dialogs/config-flow/show-dialog-options-flow"; import { @@ -118,14 +122,6 @@ const OVERRIDE_DEVICE_CLASSES = { ], }; -const OVERRIDE_WEATHER_UNITS = { - precipitation: ["mm", "in"], - pressure: ["hPa", "mbar", "mmHg", "inHg"], - temperature: ["°C", "°F"], - visibility: ["km", "mi"], - wind_speed: ["ft/s", "km/h", "kn", "m/s", "mph"], -}; - const SWITCH_AS_DOMAINS = ["cover", "fan", "light", "lock", "siren"]; const PRECISIONS = [0, 1, 2, 3, 4, 5, 6]; @@ -180,6 +176,8 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @state() private _sensorDeviceClassConvertibleUnits?: string[]; + @state() private _weatherConvertibleUnits?: WeatherUnits; + private _origEntityId!: string; private _deviceLookup?: Record; @@ -319,6 +317,16 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { this._sensorDeviceClassConvertibleUnits = []; } } + if (changedProps.has("_entityId")) { + const domain = computeDomain(this.entry.entity_id); + + if (domain === "weather") { + const { units } = await getWeatherConvertibleUnits(this.hass); + this._weatherConvertibleUnits = units; + } else { + this._weatherConvertibleUnits = undefined; + } + } } protected render() { @@ -543,7 +551,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @selected=${this._precipitationUnitChanged} @closed=${stopPropagation} > - ${OVERRIDE_WEATHER_UNITS.precipitation.map( + ${this._weatherConvertibleUnits?.precipitation_unit.map( (unit: string) => html` ${unit} ` @@ -559,7 +567,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @selected=${this._pressureUnitChanged} @closed=${stopPropagation} > - ${OVERRIDE_WEATHER_UNITS.pressure.map( + ${this._weatherConvertibleUnits?.pressure_unit.map( (unit: string) => html` ${unit} ` @@ -575,7 +583,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @selected=${this._temperatureUnitChanged} @closed=${stopPropagation} > - ${OVERRIDE_WEATHER_UNITS.temperature.map( + ${this._weatherConvertibleUnits?.temperature_unit.map( (unit: string) => html` ${unit} ` @@ -591,7 +599,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @selected=${this._visibilityUnitChanged} @closed=${stopPropagation} > - ${OVERRIDE_WEATHER_UNITS.visibility.map( + ${this._weatherConvertibleUnits?.visibility_unit.map( (unit: string) => html` ${unit} ` @@ -607,7 +615,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) { @selected=${this._windSpeedUnitChanged} @closed=${stopPropagation} > - ${OVERRIDE_WEATHER_UNITS.wind_speed.map( + ${this._weatherConvertibleUnits?.wind_speed_unit.map( (unit: string) => html` ${unit} `