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;
}