diff --git a/src/panels/lovelace/cards/hui-sensor-card.ts b/src/panels/lovelace/cards/hui-sensor-card.ts index 0dc038770e..e8cb258662 100644 --- a/src/panels/lovelace/cards/hui-sensor-card.ts +++ b/src/panels/lovelace/cards/hui-sensor-card.ts @@ -55,6 +55,7 @@ class HuiSensorCard extends HuiEntityCard { entity: config.entity, detail: detail || 1, hours_to_show: hours_to_show || 24, + limits: config.limits!, }; entityCardConfig.footer = footerConfig; diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index 6f70d507ce..db5c4063e4 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -286,6 +286,10 @@ export interface SensorCardConfig extends LovelaceCardConfig { detail?: number; theme?: string; hours_to_show?: number; + limits?: { + min?: number; + max?: number; + }; } export interface ShoppingListCardConfig extends LovelaceCardConfig { diff --git a/src/panels/lovelace/common/graph/coordinates.ts b/src/panels/lovelace/common/graph/coordinates.ts index 0b64d5dffd..7674492c9a 100644 --- a/src/panels/lovelace/common/graph/coordinates.ts +++ b/src/panels/lovelace/common/graph/coordinates.ts @@ -57,15 +57,22 @@ export const coordinates = ( history: any, hours: number, width: number, - detail: number + detail: number, + limits?: { min?: number; max?: number } ): number[][] | undefined => { history.forEach((item) => { item.state = Number(item.state); }); history = history.filter((item) => !Number.isNaN(item.state)); - const min = Math.min(...history.map((item) => item.state)); - const max = Math.max(...history.map((item) => item.state)); + const min = + limits?.min !== undefined + ? limits.min + : Math.min(...history.map((item) => item.state)); + const max = + limits?.max !== undefined + ? limits.max + : Math.max(...history.map((item) => item.state)); const now = new Date().getTime(); const reduce = (res, item, point) => { diff --git a/src/panels/lovelace/header-footer/hui-graph-header-footer.ts b/src/panels/lovelace/header-footer/hui-graph-header-footer.ts index 93eff825be..bc80313c02 100644 --- a/src/panels/lovelace/header-footer/hui-graph-header-footer.ts +++ b/src/panels/lovelace/header-footer/hui-graph-header-footer.ts @@ -190,12 +190,21 @@ export class HuiGraphHeaderFooter this._stateHistory!.push(...stateHistory[0]); } + const limits = + this._config!.limits === undefined && + this._stateHistory?.some( + (entity) => entity.attributes?.unit_of_measurement === "%" + ) + ? { min: 0, max: 100 } + : this._config!.limits; + this._coordinates = coordinates( this._stateHistory, this._config!.hours_to_show!, 500, - this._config!.detail! + this._config!.detail!, + limits ) || []; this._date = endTime; diff --git a/src/panels/lovelace/header-footer/types.ts b/src/panels/lovelace/header-footer/types.ts index 2514649dda..00e058f759 100644 --- a/src/panels/lovelace/header-footer/types.ts +++ b/src/panels/lovelace/header-footer/types.ts @@ -15,6 +15,10 @@ export interface GraphHeaderFooterConfig extends LovelaceHeaderFooterConfig { entity: string; detail?: number; hours_to_show?: number; + limits?: { + min?: number; + max?: number; + }; } export interface PictureHeaderFooterConfig extends LovelaceHeaderFooterConfig {