diff --git a/src/data/weather.ts b/src/data/weather.ts index fa6f6354b0..8c0f7cb5f7 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -210,7 +210,10 @@ export const weatherSVGStyles = css` } `; -export const getWeatherStateSVG = (state: string): SVGTemplateResult => { +export const getWeatherStateSVG = ( + state: string, + nightTime?: boolean +): SVGTemplateResult => { return svg` { : "" } ${ - state === "partlycloudy" + state === "partlycloudy" && nightTime + ? svg` + + ` + : state === "partlycloudy" ? svg` { export const getWeatherStateIcon = ( state: string, - element: HTMLElement + element: HTMLElement, + nightTime?: boolean ): TemplateResult | undefined => { const userDefinedIcon = getComputedStyle(element).getPropertyValue( `--weather-icon-${state}` @@ -360,7 +371,7 @@ export const getWeatherStateIcon = ( } if (weatherSVGs.has(state)) { - return html`${getWeatherStateSVG(state)}`; + return html`${getWeatherStateSVG(state, nightTime)}`; } if (state in weatherIcons) { diff --git a/src/panels/lovelace/cards/hui-weather-forecast-card.ts b/src/panels/lovelace/cards/hui-weather-forecast-card.ts index 234549a4fd..98726230bc 100644 --- a/src/panels/lovelace/cards/hui-weather-forecast-card.ts +++ b/src/panels/lovelace/cards/hui-weather-forecast-card.ts @@ -163,6 +163,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { : undefined; let hourly: boolean | undefined; + let dayNight: boolean | undefined; if (forecast?.length && forecast?.length > 2) { const date1 = new Date(forecast[1].datetime); @@ -170,6 +171,14 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { const timeDiff = date2.getTime() - date1.getTime(); hourly = timeDiff < DAY_IN_MILLISECONDS; + + if (hourly) { + const dateFirst = new Date(forecast[0].datetime); + const datelast = new Date(forecast[forecast.length - 1].datetime); + const dayDiff = datelast.getTime() - dateFirst.getTime(); + + dayNight = dayDiff > DAY_IN_MILLISECONDS; + } } const weatherStateIcon = getWeatherStateIcon(stateObj.state, this); @@ -235,7 +244,21 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { (item) => html`
- ${hourly + ${dayNight + ? html` + ${new Date(item.datetime).toLocaleDateString( + this.hass!.language, + { weekday: "short" } + )} +
+ ${item.daytime === undefined || item.daytime + ? this.hass!.localize("ui.card.weather.day") + : this.hass!.localize( + "ui.card.weather.night" + )}
+
+ ` + : hourly ? html` ${new Date(item.datetime).toLocaleTimeString( this.hass!.language, @@ -254,7 +277,11 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { ${item.condition !== undefined && item.condition !== null ? html`
- ${getWeatherStateIcon(item.condition, this)} + ${getWeatherStateIcon( + item.condition, + this, + !(item.daytime || item.daytime === undefined) + )}
` : ""} @@ -445,6 +472,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { .attribute, .templow, + .daynight, .name { color: var(--secondary-text-color); } diff --git a/src/translations/en.json b/src/translations/en.json index 326b51049c..f41d4074cf 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -254,6 +254,8 @@ "wnw": "WNW", "wsw": "WSW" }, + "day": "Day", + "night": "Night", "forecast": "Forecast", "high": "High", "low": "Low" diff --git a/src/types.ts b/src/types.ts index ddd285cf93..321438ecef 100644 --- a/src/types.ts +++ b/src/types.ts @@ -341,6 +341,7 @@ interface ForecastAttribute { precipitation_probability?: number; humidity?: number; condition?: string; + daytime?: boolean; } export type WeatherEntity = HassEntityBase & {