From f47fba227d69a6e1c27b5a7c15543feae4dc6e9d Mon Sep 17 00:00:00 2001 From: oleg-d Date: Tue, 16 Apr 2024 16:52:48 +0300 Subject: [PATCH] Add ability which can show the apparent temperature from a sensor (#361) --- README.md | 4 +- src/clock-weather-card.ts | 19 +++++++++- src/localize/languages/bg.json | 5 ++- src/localize/languages/ca.json | 3 +- src/localize/languages/cs.json | 5 ++- src/localize/languages/da.json | 3 +- src/localize/languages/de.json | 5 ++- src/localize/languages/el.json | 3 +- src/localize/languages/en.json | 4 +- src/localize/languages/es.json | 3 +- src/localize/languages/et.json | 3 +- src/localize/languages/fi.json | 5 ++- src/localize/languages/fr.json | 3 +- src/localize/languages/he.json | 3 +- src/localize/languages/hu.json | 5 ++- src/localize/languages/is.json | 61 +++++++++++++++--------------- src/localize/languages/it.json | 3 +- src/localize/languages/ko.json | 3 +- src/localize/languages/lt.json | 5 ++- src/localize/languages/nb.json | 3 +- src/localize/languages/nl.json | 5 ++- src/localize/languages/pl.json | 3 +- src/localize/languages/pt-br.json | 3 +- src/localize/languages/pt.json | 3 +- src/localize/languages/ro.json | 3 +- src/localize/languages/ru.json | 5 ++- src/localize/languages/sk.json | 3 +- src/localize/languages/sl.json | 3 +- src/localize/languages/sr.json | 60 ++++++++++++++--------------- src/localize/languages/srlatn.json | 3 +- src/localize/languages/sv.json | 5 ++- src/localize/languages/th.json | 3 +- src/localize/languages/tr.json | 3 +- src/localize/languages/uk.json | 5 ++- src/localize/languages/ur.json | 3 +- src/localize/languages/vi.json | 3 +- src/localize/languages/zh-cn.json | 5 ++- src/localize/languages/zh-tw.json | 5 ++- src/types.ts | 2 + 39 files changed, 164 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index 8b91aab7..32a01c0b 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ hourly_forecast: false use_browser_time: false time_zone: null show_decimal: false +apparent_sensor: sensor.real_feel_temperature ``` ### Options @@ -143,7 +144,8 @@ show_decimal: false | hourly_forecast | boolean | **Optional** | Displays an hourly forecast instead of daily | `false` | | use_browser_time | boolean | **Optional** | Uses the time from your browser to indicate the current time. If not provided, uses the [time_zone](https://www.home-assistant.io/blog/2015/05/09/utc-time-zone-awareness/#setting-up-your-time-zone) configured in HA | `false` | | time_zone | string | **Optional** | Uses the given [time zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) to indicate the current date and time. If not provided, uses the time zone configured in HA | `null` | -| show_decimal | boolean | **Optional** | Displays main temperature without rounding | `false` | +| show_decimal | boolean | **Optional** | Displays main temperature without rounding | `false` | +| apparent_sensor | string | **Optional** | ID of the apparent temperature sensor entity. It is used to show the apparent temperature based on a sensor and will only show it if value is provided. | `''` | ## Footnotes diff --git a/src/clock-weather-card.ts b/src/clock-weather-card.ts index 5c946a89..bd8484fe 100644 --- a/src/clock-weather-card.ts +++ b/src/clock-weather-card.ts @@ -211,12 +211,15 @@ export class ClockWeatherCard extends LitElement { const state = weather.state const temp = this.config.show_decimal ? this.getCurrentTemperature() : roundIfNotNull(this.getCurrentTemperature()) const tempUnit = weather.attributes.temperature_unit + const apparentTemp = this.config.show_decimal ? this.getApparentTemperature() : roundIfNotNull(this.getApparentTemperature()) const humidity = roundIfNotNull(this.getCurrentHumidity()) const iconType = this.config.weather_icon_type const icon = this.toIcon(state, iconType, false, this.getIconAnimationKind()) const weatherString = this.localize(`weather.${state}`) const localizedTemp = temp !== null ? this.toConfiguredTempWithUnit(tempUnit, temp) : null const localizedHumidity = humidity !== null ? `${humidity}% ${this.localize('misc.humidity')}` : null + const localizedApparent = apparentTemp !== null ? this.toConfiguredTempWithUnit(tempUnit, apparentTemp) : null + const apparentString = this.localize('misc.feels-like') return html` @@ -227,6 +230,7 @@ export class ClockWeatherCard extends LitElement { ${this.config.hide_clock ? weatherString : localizedTemp ? `${weatherString}, ${localizedTemp}` : weatherString} ${this.config.show_humidity && localizedHumidity ? html`
${localizedHumidity}` : ''} + ${this.config.apparent_sensor && apparentTemp ? html`
${apparentString}: ${localizedApparent}` : ''}
${this.config.hide_clock ? localizedTemp ?? 'n/a' : this.time()} @@ -426,7 +430,8 @@ export class ClockWeatherCard extends LitElement { date_pattern: config.date_pattern ?? 'D', use_browser_time: config.use_browser_time ?? false, time_zone: config.time_zone ?? undefined, - show_decimal: config.show_decimal ?? false + show_decimal: config.show_decimal ?? false, + apparent_sensor: config.apparent_sensor ?? undefined } } @@ -472,6 +477,18 @@ export class ClockWeatherCard extends LitElement { return this.getWeather().attributes.humidity ?? null } + private getApparentTemperature (): number | null { + if (this.config.apparent_sensor) { + const apparentSensor = this.hass.states[this.config.apparent_sensor] as TemperatureSensor | undefined + const temp = apparentSensor?.state ? parseFloat(apparentSensor.state) : undefined + const unit = apparentSensor?.attributes.unit_of_measurement ?? this.getConfiguredTemperatureUnit() + if (temp !== undefined && !isNaN(temp)) { + return this.toConfiguredTempWithoutUnit(unit, temp) + } + } + return null + } + private getSun (): HassEntityBase | undefined { return this.hass.states[this.config.sun_entity] } diff --git a/src/localize/languages/bg.json b/src/localize/languages/bg.json index 115e6833..aa3d016d 100644 --- a/src/localize/languages/bg.json +++ b/src/localize/languages/bg.json @@ -26,6 +26,7 @@ "7": "Нд" }, "misc": { - "humidity": "влажност" + "humidity": "влажност", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/ca.json b/src/localize/languages/ca.json index 03d60d18..c4bbdc73 100644 --- a/src/localize/languages/ca.json +++ b/src/localize/languages/ca.json @@ -26,6 +26,7 @@ "7": "Dg." }, "misc": { - "humidity": "humitat" + "humidity": "humitat", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/cs.json b/src/localize/languages/cs.json index a340d171..b1f802de 100644 --- a/src/localize/languages/cs.json +++ b/src/localize/languages/cs.json @@ -26,6 +26,7 @@ "7": "Ne" }, "misc": { - "humidity": "vlhkost" + "humidity": "vlhkost", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/da.json b/src/localize/languages/da.json index 548a8d3d..ade8be57 100644 --- a/src/localize/languages/da.json +++ b/src/localize/languages/da.json @@ -26,6 +26,7 @@ "7": "Søn" }, "misc": { - "humidity": "fugtighed" + "humidity": "fugtighed", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/de.json b/src/localize/languages/de.json index 58269d28..1ec90a05 100644 --- a/src/localize/languages/de.json +++ b/src/localize/languages/de.json @@ -26,6 +26,7 @@ "7": "So" }, "misc": { - "humidity": "Luftfeuchtigkeit" + "humidity": "Luftfeuchtigkeit", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/el.json b/src/localize/languages/el.json index cf610307..07874e03 100644 --- a/src/localize/languages/el.json +++ b/src/localize/languages/el.json @@ -26,6 +26,7 @@ "7": "Κυρ" }, "misc": { - "humidity": "υγρασία" + "humidity": "υγρασία", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/en.json b/src/localize/languages/en.json index 84ab7d6c..10957e7d 100644 --- a/src/localize/languages/en.json +++ b/src/localize/languages/en.json @@ -26,7 +26,7 @@ "7": "Sun" }, "misc": { - "humidity": "Humidity" + "humidity": "Humidity", + "feels-like": "Feels like" } - } diff --git a/src/localize/languages/es.json b/src/localize/languages/es.json index e92b624b..85780a79 100644 --- a/src/localize/languages/es.json +++ b/src/localize/languages/es.json @@ -26,6 +26,7 @@ "7": "Dom" }, "misc": { - "humidity": "humedad" + "humidity": "humedad", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/et.json b/src/localize/languages/et.json index de4bece8..08b54287 100644 --- a/src/localize/languages/et.json +++ b/src/localize/languages/et.json @@ -26,6 +26,7 @@ "7": "P" }, "misc": { - "humidity": "niiskus" + "humidity": "niiskus", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/fi.json b/src/localize/languages/fi.json index d069b99a..3595f81a 100644 --- a/src/localize/languages/fi.json +++ b/src/localize/languages/fi.json @@ -26,6 +26,7 @@ "7": "Su" }, "misc": { - "humidity": "kosteus" + "humidity": "kosteus", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/fr.json b/src/localize/languages/fr.json index f75118b0..eddc3774 100644 --- a/src/localize/languages/fr.json +++ b/src/localize/languages/fr.json @@ -26,6 +26,7 @@ "7": "Dim" }, "misc": { - "humidity": "humidité" + "humidity": "humidité", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/he.json b/src/localize/languages/he.json index 44a58387..9814667f 100644 --- a/src/localize/languages/he.json +++ b/src/localize/languages/he.json @@ -26,6 +26,7 @@ "7": "ראשון" }, "misc": { - "humidity": "לחות" + "humidity": "לחות", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/hu.json b/src/localize/languages/hu.json index 2f8e47d6..21915d1f 100644 --- a/src/localize/languages/hu.json +++ b/src/localize/languages/hu.json @@ -26,6 +26,7 @@ "7": "V" }, "misc": { - "humidity": "páratartalom" + "humidity": "páratartalom", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/is.json b/src/localize/languages/is.json index d97b5405..1b649c4e 100644 --- a/src/localize/languages/is.json +++ b/src/localize/languages/is.json @@ -1,31 +1,32 @@ { - "weather": { - "clear-night": "Heiðskýrt", - "cloudy": "Skýjað", - "fog": "Þoka", - "hail": "Hagl", - "lightning": "Eldingar", - "lightning-rainy": "Þrumur", - "partlycloudy": "Skýjað að hluta", - "pouring": "mikil rigning", - "rainy": "Rigning", - "snowy": "Snjókoma", - "snowy-rainy": "Él", - "sunny": "Sólríkt", - "windy": "Hvasst", - "windy-variant": "Stórmur", - "exceptional": "Óveður" - }, - "day": { - "1": "Mán", - "2": "Þri", - "3": "Mið", - "4": "Fim", - "5": "Fös", - "6": "Lau", - "7": "Sun" - }, - "misc": { - "humidity": "raki" - } - } \ No newline at end of file + "weather": { + "clear-night": "Heiðskýrt", + "cloudy": "Skýjað", + "fog": "Þoka", + "hail": "Hagl", + "lightning": "Eldingar", + "lightning-rainy": "Þrumur", + "partlycloudy": "Skýjað að hluta", + "pouring": "mikil rigning", + "rainy": "Rigning", + "snowy": "Snjókoma", + "snowy-rainy": "Él", + "sunny": "Sólríkt", + "windy": "Hvasst", + "windy-variant": "Stórmur", + "exceptional": "Óveður" + }, + "day": { + "1": "Mán", + "2": "Þri", + "3": "Mið", + "4": "Fim", + "5": "Fös", + "6": "Lau", + "7": "Sun" + }, + "misc": { + "humidity": "raki", + "feels-like": "Feels like" + } +} diff --git a/src/localize/languages/it.json b/src/localize/languages/it.json index c3000445..eabbdadb 100644 --- a/src/localize/languages/it.json +++ b/src/localize/languages/it.json @@ -26,6 +26,7 @@ "7": "Dom" }, "misc": { - "humidity": "umidità" + "humidity": "umidità", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/ko.json b/src/localize/languages/ko.json index 3ad659b8..6d40212c 100644 --- a/src/localize/languages/ko.json +++ b/src/localize/languages/ko.json @@ -26,6 +26,7 @@ "7": "일" }, "misc": { - "humidity": "습도" + "humidity": "습도", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/lt.json b/src/localize/languages/lt.json index c5e68a82..e74c1475 100644 --- a/src/localize/languages/lt.json +++ b/src/localize/languages/lt.json @@ -26,6 +26,7 @@ "7": "Sk" }, "misc": { - "humidity": "drėgmė" + "humidity": "drėgmė", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/nb.json b/src/localize/languages/nb.json index 9da15238..b291b9aa 100644 --- a/src/localize/languages/nb.json +++ b/src/localize/languages/nb.json @@ -26,6 +26,7 @@ "7": "Søn" }, "misc": { - "humidity": "fuktighet" + "humidity": "fuktighet", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/nl.json b/src/localize/languages/nl.json index 6388fc25..086159ee 100644 --- a/src/localize/languages/nl.json +++ b/src/localize/languages/nl.json @@ -26,6 +26,7 @@ "7": "Zo" }, "misc": { - "humidity": "vochtigheid" + "humidity": "vochtigheid", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/pl.json b/src/localize/languages/pl.json index 2f2793dd..181e120e 100644 --- a/src/localize/languages/pl.json +++ b/src/localize/languages/pl.json @@ -26,6 +26,7 @@ "7": "niedz." }, "misc": { - "humidity": "wilgotność" + "humidity": "wilgotność", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/pt-br.json b/src/localize/languages/pt-br.json index 9ba2ac41..e415bc7b 100644 --- a/src/localize/languages/pt-br.json +++ b/src/localize/languages/pt-br.json @@ -26,6 +26,7 @@ "7": "Dom" }, "misc": { - "humidity": "umidade" + "humidity": "umidade", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/pt.json b/src/localize/languages/pt.json index f321f4fd..e9bb8b7f 100644 --- a/src/localize/languages/pt.json +++ b/src/localize/languages/pt.json @@ -26,6 +26,7 @@ "7": "Dom" }, "misc": { - "humidity": "humidade" + "humidity": "humidade", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/ro.json b/src/localize/languages/ro.json index 465ee518..540e9bab 100644 --- a/src/localize/languages/ro.json +++ b/src/localize/languages/ro.json @@ -26,6 +26,7 @@ "7": "Dum" }, "misc": { - "humidity": "umiditate" + "humidity": "umiditate", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/ru.json b/src/localize/languages/ru.json index fc781f8e..35099365 100644 --- a/src/localize/languages/ru.json +++ b/src/localize/languages/ru.json @@ -26,6 +26,7 @@ "7": "Вс" }, "misc": { - "humidity": "влажность" + "humidity": "влажность", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/sk.json b/src/localize/languages/sk.json index 23c23458..c339a2ba 100644 --- a/src/localize/languages/sk.json +++ b/src/localize/languages/sk.json @@ -26,6 +26,7 @@ "7": "Ned" }, "misc": { - "humidity": "vlhkosť" + "humidity": "vlhkosť", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/sl.json b/src/localize/languages/sl.json index 3c737c19..681e0254 100644 --- a/src/localize/languages/sl.json +++ b/src/localize/languages/sl.json @@ -26,6 +26,7 @@ "7": "Ned" }, "misc": { - "humidity": "vlažnost" + "humidity": "vlažnost", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/sr.json b/src/localize/languages/sr.json index f864eeac..b4b1c7ef 100644 --- a/src/localize/languages/sr.json +++ b/src/localize/languages/sr.json @@ -1,32 +1,32 @@ { - "weather": { - "clear-night": "Ведро", - "cloudy": "Облачно", - "fog": "Магла", - "hail": "Град", - "lightning": "Грмљавина", - "lightning-rainy": "Киша уз грмљавину", - "partlycloudy": "Делимично облачно", - "pouring": "Пљусак", - "rainy": "Киша", - "snowy": "Снег", - "snowy-rainy": "Суснежица", - "sunny": "Сунчано", - "windy": "Ветар", - "windy-variant": "Јак ветар", - "exceptional": "Изузетно" - }, - "day": { - "1": "Пон", - "2": "Уто", - "3": "Сре", - "4": "Чет", - "5": "Пет", - "6": "Суб", - "7": "Нед" - }, - "misc": { - "humidity": "Влажност" - } + "weather": { + "clear-night": "Ведро", + "cloudy": "Облачно", + "fog": "Магла", + "hail": "Град", + "lightning": "Грмљавина", + "lightning-rainy": "Киша уз грмљавину", + "partlycloudy": "Делимично облачно", + "pouring": "Пљусак", + "rainy": "Киша", + "snowy": "Снег", + "snowy-rainy": "Суснежица", + "sunny": "Сунчано", + "windy": "Ветар", + "windy-variant": "Јак ветар", + "exceptional": "Изузетно" + }, + "day": { + "1": "Пон", + "2": "Уто", + "3": "Сре", + "4": "Чет", + "5": "Пет", + "6": "Суб", + "7": "Нед" + }, + "misc": { + "humidity": "Влажност", + "feels-like": "Feels like" } - \ No newline at end of file +} diff --git a/src/localize/languages/srlatn.json b/src/localize/languages/srlatn.json index f75eb89f..3b9e2d4b 100644 --- a/src/localize/languages/srlatn.json +++ b/src/localize/languages/srlatn.json @@ -26,6 +26,7 @@ "7": "Ned" }, "misc": { - "humidity": "Vlažnost" + "humidity": "Vlažnost", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/sv.json b/src/localize/languages/sv.json index e0db0b30..c8897ac0 100644 --- a/src/localize/languages/sv.json +++ b/src/localize/languages/sv.json @@ -26,6 +26,7 @@ "7": "Sön" }, "misc": { - "humidity": "fuktighet" + "humidity": "fuktighet", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/th.json b/src/localize/languages/th.json index a30bb20b..f26959ea 100644 --- a/src/localize/languages/th.json +++ b/src/localize/languages/th.json @@ -26,6 +26,7 @@ "7": "อา." }, "misc": { - "humidity": "ความชื้น" + "humidity": "ความชื้น", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/tr.json b/src/localize/languages/tr.json index 96302e0c..f8c4dc81 100644 --- a/src/localize/languages/tr.json +++ b/src/localize/languages/tr.json @@ -26,6 +26,7 @@ "7": "Pzr" }, "misc": { - "humidity": "nem" + "humidity": "nem", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/uk.json b/src/localize/languages/uk.json index 6d2c7f0c..0ed45316 100644 --- a/src/localize/languages/uk.json +++ b/src/localize/languages/uk.json @@ -26,6 +26,7 @@ "7": "Нд" }, "misc": { - "humidity": "вологість" + "humidity": "вологість", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/ur.json b/src/localize/languages/ur.json index 47449c34..73f42bf1 100644 --- a/src/localize/languages/ur.json +++ b/src/localize/languages/ur.json @@ -26,6 +26,7 @@ "7": "اتوار" }, "misc": { - "humidity": "نمی" + "humidity": "نمی", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/vi.json b/src/localize/languages/vi.json index 827c4f9c..88ca286d 100644 --- a/src/localize/languages/vi.json +++ b/src/localize/languages/vi.json @@ -26,6 +26,7 @@ "7": "CN" }, "misc": { - "humidity": "độ ẩm" + "humidity": "độ ẩm", + "feels-like": "Feels like" } } diff --git a/src/localize/languages/zh-cn.json b/src/localize/languages/zh-cn.json index bf375672..387a5106 100644 --- a/src/localize/languages/zh-cn.json +++ b/src/localize/languages/zh-cn.json @@ -26,6 +26,7 @@ "7": "周日" }, "misc": { - "humidity": "湿度" + "humidity": "湿度", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/localize/languages/zh-tw.json b/src/localize/languages/zh-tw.json index f734d89c..7152512f 100644 --- a/src/localize/languages/zh-tw.json +++ b/src/localize/languages/zh-tw.json @@ -26,6 +26,7 @@ "7": "週日" }, "misc": { - "humidity": "濕度" + "humidity": "濕度", + "feels-like": "Feels like" } -} \ No newline at end of file +} diff --git a/src/types.ts b/src/types.ts index c0f907f5..68ed3ca0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -31,6 +31,7 @@ export interface ClockWeatherCardConfig extends LovelaceCardConfig { use_browser_time?: boolean time_zone?: string show_decimal?: boolean + apparent_sensor?: string } export interface MergedClockWeatherCardConfig extends LovelaceCardConfig { @@ -55,6 +56,7 @@ export interface MergedClockWeatherCardConfig extends LovelaceCardConfig { use_browser_time: boolean time_zone?: string show_decimal: boolean + apparent_sensor?: string } export const enum WeatherEntityFeature {