From b88317f1d3cf947303aaeaeacd977abe569e26c5 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 29 Sep 2022 04:52:40 +0200 Subject: [PATCH] change values when unsupported_unit_metadata_can_convert (#13903) --- src/data/recorder.ts | 11 +++++++ .../statistics/developer-tools-statistics.ts | 11 ++++++- ...og-statistics-fix-unsupported-unit-meta.ts | 32 ++++++++++++++----- ...og-statistics-fix-unsupported-unit-meta.ts | 9 ++++-- 4 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/data/recorder.ts b/src/data/recorder.ts index ca00fbff67..c13e8bc210 100644 --- a/src/data/recorder.ts +++ b/src/data/recorder.ts @@ -37,6 +37,7 @@ export type StatisticsValidationResult = | StatisticsValidationResultUnitsChanged | StatisticsValidationResultUnitsChangedCanConvert | StatisticsValidationResultUnsupportedUnitMetadata + | StatisticsValidationResultUnsupportedUnitMetadataCanConvert | StatisticsValidationResultUnsupportedUnitState; export interface StatisticsValidationResultNoState { @@ -79,6 +80,16 @@ export interface StatisticsValidationResultUnsupportedUnitMetadata { }; } +export interface StatisticsValidationResultUnsupportedUnitMetadataCanConvert { + type: "unsupported_unit_metadata_can_convert"; + data: { + statistic_id: string; + device_class: string; + metadata_unit: string; + supported_unit: string; + }; +} + export interface StatisticsUnitConfiguration { energy?: "Wh" | "kWh" | "MWh"; power?: "W" | "kW"; diff --git a/src/panels/developer-tools/statistics/developer-tools-statistics.ts b/src/panels/developer-tools/statistics/developer-tools-statistics.ts index 50f0452b3b..8ea66e1083 100644 --- a/src/panels/developer-tools/statistics/developer-tools-statistics.ts +++ b/src/panels/developer-tools/statistics/developer-tools-statistics.ts @@ -35,7 +35,8 @@ const FIX_ISSUES_ORDER = { unsupported_state_class: 3, units_changed_can_convert: 4, units_changed: 5, - unsupported_unit_metadata: 6, + unsupported_unit_metadata_can_convert: 6, + unsupported_unit_metadata: 7, }; @customElement("developer-tools-statistics") class HaPanelDevStatistics extends SubscribeMixin(LitElement) { @@ -323,6 +324,14 @@ class HaPanelDevStatistics extends SubscribeMixin(LitElement) { }, }); break; + case "unsupported_unit_metadata_can_convert": + showFixStatisticsUnsupportedUnitMetadataDialog(this, { + issue, + fixedCallback: () => { + this._validateStatistics(); + }, + }); + break; case "unsupported_unit_state": showAlertDialog(this, { title: "Unsupported unit", diff --git a/src/panels/developer-tools/statistics/dialog-statistics-fix-unsupported-unit-meta.ts b/src/panels/developer-tools/statistics/dialog-statistics-fix-unsupported-unit-meta.ts index 0058fa49d2..084aa81577 100644 --- a/src/panels/developer-tools/statistics/dialog-statistics-fix-unsupported-unit-meta.ts +++ b/src/panels/developer-tools/statistics/dialog-statistics-fix-unsupported-unit-meta.ts @@ -5,7 +5,10 @@ import "../../../components/ha-dialog"; import { fireEvent } from "../../../common/dom/fire_event"; import { haStyle, haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; -import { updateStatisticsMetadata } from "../../../data/recorder"; +import { + changeStatisticUnit, + updateStatisticsMetadata, +} from "../../../data/recorder"; import "../../../components/ha-formfield"; import "../../../components/ha-radio"; import type { DialogStatisticsUnsupportedUnitMetaParams } from "./show-dialog-statistics-fix-unsupported-unit-meta"; @@ -43,8 +46,12 @@ export class DialogStatisticsFixUnsupportedUnitMetadata extends LitElement { should be ${this._params.issue.data.supported_unit}.

- Do you want to update the unit of the history statistics to - ${this._params.issue.data.supported_unit}? + ${this._params.issue.type === "unsupported_unit_metadata_can_convert" + ? `Do you want to convert all the historic statistic values to + ${this._params.issue.data.supported_unit}?` + : `Do you want to update the unit of the history statistics to + ${this._params.issue.data.supported_unit} without converting the + values?`}

{ - await updateStatisticsMetadata( - this.hass, - this._params!.issue.data.statistic_id, - this._params!.issue.data.supported_unit - ); + if (this._params!.issue.type === "unsupported_unit_metadata_can_convert") { + await changeStatisticUnit( + this.hass, + this._params!.issue.data.statistic_id, + this._params!.issue.data.metadata_unit, + this._params!.issue.data.supported_unit + ); + } else { + await updateStatisticsMetadata( + this.hass, + this._params!.issue.data.statistic_id, + this._params!.issue.data.supported_unit + ); + } this._params?.fixedCallback(); this.closeDialog(); } diff --git a/src/panels/developer-tools/statistics/show-dialog-statistics-fix-unsupported-unit-meta.ts b/src/panels/developer-tools/statistics/show-dialog-statistics-fix-unsupported-unit-meta.ts index 8ea4c5d915..de0aaf287c 100644 --- a/src/panels/developer-tools/statistics/show-dialog-statistics-fix-unsupported-unit-meta.ts +++ b/src/panels/developer-tools/statistics/show-dialog-statistics-fix-unsupported-unit-meta.ts @@ -1,11 +1,16 @@ import { fireEvent } from "../../../common/dom/fire_event"; -import { StatisticsValidationResultUnsupportedUnitMetadata } from "../../../data/recorder"; +import { + StatisticsValidationResultUnsupportedUnitMetadata, + StatisticsValidationResultUnsupportedUnitMetadataCanConvert, +} from "../../../data/recorder"; export const loadFixUnsupportedUnitMetaDialog = () => import("./dialog-statistics-fix-unsupported-unit-meta"); export interface DialogStatisticsUnsupportedUnitMetaParams { - issue: StatisticsValidationResultUnsupportedUnitMetadata; + issue: + | StatisticsValidationResultUnsupportedUnitMetadata + | StatisticsValidationResultUnsupportedUnitMetadataCanConvert; fixedCallback: () => void; }