From fae1bcf0e014b3f88a01b04a3616498ccd389687 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 20 May 2022 11:25:19 -0700 Subject: [PATCH] Fixes logbook (#12740) --- src/data/logbook.ts | 1 + src/panels/logbook/ha-logbook.ts | 30 +++++++++++++------ src/panels/lovelace/cards/hui-logbook-card.ts | 2 +- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/data/logbook.ts b/src/data/logbook.ts index e5e37779ee..dffd273e5f 100644 --- a/src/data/logbook.ts +++ b/src/data/logbook.ts @@ -10,6 +10,7 @@ const LOGBOOK_LOCALIZE_PATH = "ui.components.logbook.messages"; export const CONTINUOUS_DOMAINS = ["proximity", "sensor"]; export interface LogbookEntry { + // Python timestamp. Do *1000 to get JS timestamp. when: number; name: string; message?: string; diff --git a/src/panels/logbook/ha-logbook.ts b/src/panels/logbook/ha-logbook.ts index 7b959bc912..c84ab62bfd 100644 --- a/src/panels/logbook/ha-logbook.ts +++ b/src/panels/logbook/ha-logbook.ts @@ -19,7 +19,12 @@ import "./ha-logbook-renderer"; export class HaLogbook extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property() public time!: { range: [Date, Date] } | { recent: number }; + @property() public time!: + | { range: [Date, Date] } + | { + // Seconds + recent: number; + }; @property() public entityIds?: string[]; @@ -211,17 +216,19 @@ export class HaLogbook extends LitElement { let startTime: Date; let endTime: Date; - let appendData = false; + let purgeBeforePythonTime: number | undefined; if ("range" in this.time) { [startTime, endTime] = this.time.range; - } else { - // Recent data - appendData = true; + } else if ("recent" in this.time) { + purgeBeforePythonTime = + new Date(new Date().getTime() - this.time.recent * 1000).getTime() / + 1000; startTime = - this._lastLogbookDate || - new Date(new Date().getTime() - 24 * 60 * 60 * 1000); + this._lastLogbookDate || new Date(purgeBeforePythonTime * 1000); endTime = new Date(); + } else { + throw new Error("Unexpected time specified"); } let newEntries: LogbookEntry[]; @@ -251,8 +258,13 @@ export class HaLogbook extends LitElement { newEntries = [...newEntries].reverse(); this._logbookEntries = - appendData && this._logbookEntries - ? newEntries.concat(...this._logbookEntries) + // If we have a purgeBeforeTime, it means we're in recent-mode and fetch batches + purgeBeforePythonTime && this._logbookEntries + ? newEntries.concat( + ...this._logbookEntries.filter( + (entry) => entry.when > purgeBeforePythonTime! + ) + ) : newEntries; this._lastLogbookDate = endTime; } diff --git a/src/panels/lovelace/cards/hui-logbook-card.ts b/src/panels/lovelace/cards/hui-logbook-card.ts index a89cb4f048..13aaf9a2ab 100644 --- a/src/panels/lovelace/cards/hui-logbook-card.ts +++ b/src/panels/lovelace/cards/hui-logbook-card.ts @@ -70,7 +70,7 @@ export class HuiLogbookCard extends LitElement implements LovelaceCard { ...config, }; this._time = { - recent: this._config!.hours_to_show! * 60 * 60 * 1000, + recent: this._config!.hours_to_show! * 60 * 60, }; this._entityId = processConfigEntities(config.entities).map( (entity) => entity.entity