From 09edcdb9a36f17e4996dd3767b704b0355cc20bf Mon Sep 17 00:00:00 2001 From: Julian Pawlowski Date: Wed, 15 Apr 2026 09:56:24 +0000 Subject: [PATCH] fix(repairs): reliably show statistics-review issue on every HA restart We have no way to programmatically detect whether the Recorder statistics have been fixed. Dismissing the Repairs notification does not mean the problem is resolved, only that the user has seen it. Revert to delete + create on every async_setup_entry when the flag is set. This guarantees the issue is visible after every restart until the user explicitly acknowledges completion by re-saving the display settings in the options flow. Remove the dismissed_version auto-clear logic that was treating dismissal as acknowledgement (it was not). Update all 5 translation files: replace "Dismiss this notice" with instructions to re-save display settings as the only way to permanently close the notification. Released-Bug: no --- custom_components/tibber_prices/__init__.py | 22 +++---- .../tibber_prices/translations/de.json | 57 ++++++++++++++++++- .../tibber_prices/translations/en.json | 57 ++++++++++++++++++- .../tibber_prices/translations/nb.json | 57 ++++++++++++++++++- .../tibber_prices/translations/nl.json | 57 ++++++++++++++++++- .../tibber_prices/translations/sv.json | 57 ++++++++++++++++++- 6 files changed, 287 insertions(+), 20 deletions(-) diff --git a/custom_components/tibber_prices/__init__.py b/custom_components/tibber_prices/__init__.py index af52f56..035c5b8 100644 --- a/custom_components/tibber_prices/__init__.py +++ b/custom_components/tibber_prices/__init__.py @@ -215,26 +215,18 @@ def _get_access_token(hass: HomeAssistant, entry: ConfigEntry) -> str: def _check_statistics_review_repair(hass: HomeAssistant, entry: TibberPricesConfigEntry) -> None: - """Ensure the statistics-review repair issue is visible when the flag is set. + """Re-create the statistics-review repair issue on every setup when the flag is set. - Uses async_get_or_create so that a user-dismissed issue stays dismissed across restarts. - The flag is cleared automatically when the issue has been dismissed (detected on next setup), - or when the user re-saves the currency display settings in the options flow. - The options flow uses delete + create whenever the mode changes again, which forces the - issue back into view for the new change regardless of prior dismissal. + Uses delete + create to guarantee visibility after HA restarts regardless of prior dismissal. + We have no way to detect whether the Recorder statistics have actually been fixed, so the + flag can only be cleared by an explicit user action: re-saving the currency display settings + in the options flow (with the same mode = "I have reviewed everything"). + Dismissing the HA Repairs notification alone does NOT count as acknowledgement. """ if not entry.data.get(DATA_STATISTICS_REVIEW_REQUIRED): return issue_id = f"currency_display_mode_changed_{entry.entry_id}" - - # If the issue was dismissed by the user, clear the flag and don't recreate it. - issue_registry = ir.async_get(hass) - existing = issue_registry.async_get_issue(DOMAIN, issue_id) - if existing is not None and existing.dismissed_version is not None: - new_data = {k: v for k, v in entry.data.items() if k != DATA_STATISTICS_REVIEW_REQUIRED} - hass.config_entries.async_update_entry(entry, data=new_data) - return - + ir.async_delete_issue(hass, DOMAIN, issue_id) ir.async_create_issue( hass, DOMAIN, diff --git a/custom_components/tibber_prices/translations/de.json b/custom_components/tibber_prices/translations/de.json index f5d3117..5af5abe 100644 --- a/custom_components/tibber_prices/translations/de.json +++ b/custom_components/tibber_prices/translations/de.json @@ -1012,6 +1012,52 @@ "mixed": "Gemischt" } }, + "current_price_phase": { + "name": "Aktuelle Preisphase", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "flat": "Flach" + } + }, + "next_price_phase": { + "name": "Nächste Preisphase", + "state": { + "rising": "Steigend", + "falling": "Fallend", + "flat": "Flach" + } + }, + "current_price_phase_end_time": { + "name": "Current Phase End Time" + }, + "current_price_phase_remaining_minutes": { + "name": "Current Phase Remaining" + }, + "current_price_phase_duration": { + "name": "Current Phase Duration" + }, + "current_price_phase_progress": { + "name": "Current Phase Progress" + }, + "next_rising_phase_start_time": { + "name": "Next Rising Phase Start" + }, + "next_falling_phase_start_time": { + "name": "Next Falling Phase Start" + }, + "next_flat_phase_start_time": { + "name": "Next Flat Phase Start" + }, + "next_rising_phase_in_minutes": { + "name": "Time to Next Rising Phase" + }, + "next_falling_phase_in_minutes": { + "name": "Time to Next Falling Phase" + }, + "next_flat_phase_in_minutes": { + "name": "Time to Next Flat Phase" + }, "chart_data_export": { "name": "Diagramm-Datenexport", "state": { @@ -1069,6 +1115,15 @@ "best_price_period": { "name": "Bestpreis-Zeitraum" }, + "in_rising_price_phase": { + "name": "In Rising Price Phase" + }, + "in_falling_price_phase": { + "name": "In Falling Price Phase" + }, + "in_flat_price_phase": { + "name": "In Flat Price Phase" + }, "connection": { "name": "Tibber-API-Verbindung" }, @@ -1156,7 +1211,7 @@ }, "currency_display_mode_changed": { "title": "Währungsanzeigeeinheit für {home_name} geändert", - "description": "Du hast den Währungsanzeigemodus für **{home_name}** geändert. Alle Preissensor-Werte und -Attribute verwenden jetzt die neue Einheit (z.B. 25,34 ct → 0,2534 € oder umgekehrt).\n\nDer Recorder von Home Assistant zeigt separat einen Dialog **„Die Einheit hat sich geändert“** für betroffene Sensoren — das kann einige Minuten dauern oder bis zum nächsten Statistik-Durchlauf (Warnungen im Log erscheinen früher). Wähle dann **Alle alten Statistikdaten löschen** für einen sauberen Neustart. Wähle nicht „Einheit aktualisieren ohne Konvertierung“: das benennt die alten Zahlen nur um, ohne die Werte anzupassen, und macht die historischen Daten inhaltlich falsch.\n\n**Manuell prüfen:**\n\n1. **Automationen & Templates:** Aktualisiere alle Automationen und Template-Sensoren mit numerischen Preis-Schwellwerten.\n2. **Dashboard-Karten:** Aktualisiere alle Karten mit fest codierten Schwellwerten oder Einheitenbezeichnungen.\n\nSchließe diesen Hinweis, nachdem du deine Automationen und Dashboards überprüft hast." + "description": "Du hast den Währungsanzeigemodus für **{home_name}** geändert. Alle Preissensor-Werte und -Attribute verwenden jetzt die neue Einheit (z.B. 25,34 ct → 0,2534 € oder umgekehrt).\n\nDer Recorder von Home Assistant zeigt separat einen Dialog **„Die Einheit hat sich geändert“** für betroffene Sensoren — das kann einige Minuten dauern oder bis zum nächsten Statistik-Durchlauf (Warnungen im Log erscheinen früher). Wähle dann **Alle alten Statistikdaten löschen** für einen sauberen Neustart. Wähle nicht „Einheit aktualisieren ohne Konvertierung“: das benennt die alten Zahlen nur um, ohne die Werte anzupassen, und macht die historischen Daten inhaltlich falsch.\n\n**Manuell prüfen:**\n\n1. **Automationen & Templates:** Aktualisiere alle Automationen und Template-Sensoren mit numerischen Preis-Schwellwerten.\n2. **Dashboard-Karten:** Aktualisiere alle Karten mit fest codierten Schwellwerten oder Einheitenbezeichnungen.\n\nSobald du deine Automationen, Dashboards und Statistiken überprüft hast, gehe zu **Einstellungen → Integrationen → Tibber → Konfigurieren → Anzeigeeinstellungen** und speichere (auch ohne Änderungen). Nur so kannst du diese Meldung dauerhaft schließen." } }, "exceptions": { diff --git a/custom_components/tibber_prices/translations/en.json b/custom_components/tibber_prices/translations/en.json index 44228f6..3f6fb19 100644 --- a/custom_components/tibber_prices/translations/en.json +++ b/custom_components/tibber_prices/translations/en.json @@ -1012,6 +1012,52 @@ "mixed": "Mixed" } }, + "current_price_phase": { + "name": "Current Price Phase", + "state": { + "rising": "Rising", + "falling": "Falling", + "flat": "Flat" + } + }, + "next_price_phase": { + "name": "Next Price Phase", + "state": { + "rising": "Rising", + "falling": "Falling", + "flat": "Flat" + } + }, + "current_price_phase_end_time": { + "name": "Current Phase End Time" + }, + "current_price_phase_remaining_minutes": { + "name": "Current Phase Remaining" + }, + "current_price_phase_duration": { + "name": "Current Phase Duration" + }, + "current_price_phase_progress": { + "name": "Current Phase Progress" + }, + "next_rising_phase_start_time": { + "name": "Next Rising Phase Start" + }, + "next_falling_phase_start_time": { + "name": "Next Falling Phase Start" + }, + "next_flat_phase_start_time": { + "name": "Next Flat Phase Start" + }, + "next_rising_phase_in_minutes": { + "name": "Time to Next Rising Phase" + }, + "next_falling_phase_in_minutes": { + "name": "Time to Next Falling Phase" + }, + "next_flat_phase_in_minutes": { + "name": "Time to Next Flat Phase" + }, "chart_data_export": { "name": "Chart Data Export", "state": { @@ -1069,6 +1115,15 @@ "best_price_period": { "name": "Best Price Period" }, + "in_rising_price_phase": { + "name": "In Rising Price Phase" + }, + "in_falling_price_phase": { + "name": "In Falling Price Phase" + }, + "in_flat_price_phase": { + "name": "In Flat Price Phase" + }, "connection": { "name": "Tibber API Connection" }, @@ -1156,7 +1211,7 @@ }, "currency_display_mode_changed": { "title": "Currency display unit changed for {home_name}", - "description": "You changed the currency display mode for **{home_name}**. All price sensor values and attributes now use the new unit (e.g. 25.34 ct → 0.2534 € or vice versa).\n\nHome Assistant’s Recorder will separately show a **“The unit has changed”** dialog for affected sensors — this may take a few minutes or until the next statistics run (log warnings appear earlier). When it appears, choose **Delete all old statistic data** to start fresh. Do not choose “Update the unit without converting”: that re-labels the old numbers without adjusting their values, making the historic data factually incorrect.\n\n**Review manually:**\n\n1. **Automations & Templates:** Update all automations and template sensors that use numeric price thresholds.\n2. **Dashboard Cards:** Update any cards with hardcoded thresholds or unit labels.\n\nDismiss this notice after reviewing your automations and dashboards." + "description": "You changed the currency display mode for **{home_name}**. All price sensor values and attributes now use the new unit (e.g. 25.34 ct → 0.2534 € or vice versa).\n\nHome Assistant’s Recorder will separately show a **“The unit has changed”** dialog for affected sensors — this may take a few minutes or until the next statistics run (log warnings appear earlier). When it appears, choose **Delete all old statistic data** to start fresh. Do not choose “Update the unit without converting”: that re-labels the old numbers without adjusting their values, making the historic data factually incorrect.\n\n**Review manually:**\n\n1. **Automations & Templates:** Update all automations and template sensors that use numeric price thresholds.\n2. **Dashboard Cards:** Update any cards with hardcoded thresholds or unit labels.\n\nOnce you have reviewed your automations, dashboards, and statistics, go to **Settings → Integrations → Tibber → Configure → Display Settings** and save (without any changes if you like). This is the only way to permanently close this notification." } }, "exceptions": { diff --git a/custom_components/tibber_prices/translations/nb.json b/custom_components/tibber_prices/translations/nb.json index 68e8839..3454122 100644 --- a/custom_components/tibber_prices/translations/nb.json +++ b/custom_components/tibber_prices/translations/nb.json @@ -1012,6 +1012,52 @@ "mixed": "Blandet" } }, + "current_price_phase": { + "name": "Gjeldende Prisfase", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "flat": "Flat" + } + }, + "next_price_phase": { + "name": "Neste Prisfase", + "state": { + "rising": "Stigende", + "falling": "Fallende", + "flat": "Flat" + } + }, + "current_price_phase_end_time": { + "name": "Current Phase End Time" + }, + "current_price_phase_remaining_minutes": { + "name": "Current Phase Remaining" + }, + "current_price_phase_duration": { + "name": "Current Phase Duration" + }, + "current_price_phase_progress": { + "name": "Current Phase Progress" + }, + "next_rising_phase_start_time": { + "name": "Next Rising Phase Start" + }, + "next_falling_phase_start_time": { + "name": "Next Falling Phase Start" + }, + "next_flat_phase_start_time": { + "name": "Next Flat Phase Start" + }, + "next_rising_phase_in_minutes": { + "name": "Time to Next Rising Phase" + }, + "next_falling_phase_in_minutes": { + "name": "Time to Next Falling Phase" + }, + "next_flat_phase_in_minutes": { + "name": "Time to Next Flat Phase" + }, "chart_data_export": { "name": "Diagramdataeksport", "state": { @@ -1069,6 +1115,15 @@ "best_price_period": { "name": "Lavpris-periode" }, + "in_rising_price_phase": { + "name": "In Rising Price Phase" + }, + "in_falling_price_phase": { + "name": "In Falling Price Phase" + }, + "in_flat_price_phase": { + "name": "In Flat Price Phase" + }, "connection": { "name": "Tibber API-tilkobling" }, @@ -1156,7 +1211,7 @@ }, "currency_display_mode_changed": { "title": "Valutavisningsenhet endret for {home_name}", - "description": "Du endret valutavisningsmodusen for **{home_name}**. Alle prissensorverdier og -attributter bruker nå den nye enheten (f.eks. 25,34 øre → 0,2534 kr eller omvendt).\n\nHome Assistants Recorder viser separat en **„Enheten har endret seg“**-dialog for berørte sensorer — dette kan ta noen minutter eller til neste statistikkjøring (advarsler i loggen dukker opp tidligere). Når den vises, velg **Slett alle gamle statistikkdata** for en ren start. Ikke velg „Oppdater enheten uten konvertering“: det beholder de gamle tallene med ny enhet uten å justere verdiene, og gjør de historiske dataene faktisk feil.\n\n**Gjennomgå manuelt:**\n\n1. **Automatiseringer & maler:** Oppdater alle automatiseringer og malsensorer som bruker numeriske pristerskler.\n2. **Dashboard-kort:** Oppdater kort med hardkodede terskelverdier eller enhetsetiketter.\n\nAvvis dette varselet etter å ha gjennomgått automatiseringene og dashboardene dine." + "description": "Du endret valutavisningsmodusen for **{home_name}**. Alle prissensorverdier og -attributter bruker nå den nye enheten (f.eks. 25,34 øre → 0,2534 kr eller omvendt).\n\nHome Assistants Recorder viser separat en **„Enheten har endret seg“**-dialog for berørte sensorer — dette kan ta noen minutter eller til neste statistikkjøring (advarsler i loggen dukker opp tidligere). Når den vises, velg **Slett alle gamle statistikkdata** for en ren start. Ikke velg „Oppdater enheten uten konvertering“: det beholder de gamle tallene med ny enhet uten å justere verdiene, og gjør de historiske dataene faktisk feil.\n\n**Gjennomgå manuelt:**\n\n1. **Automatiseringer & maler:** Oppdater alle automatiseringer og malsensorer som bruker numeriske pristerskler.\n2. **Dashboard-kort:** Oppdater kort med hardkodede terskelverdier eller enhetsetiketter.\n\nNår du har gjennomgått automatiseringer, dashboards og statistikk, gå til **Innstillinger → Integrasjoner → Tibber → Konfigurer → Visningsinnstillinger** og lagre (uten endringer om ønskelig). Dette er den eneste måten å lukke denne meldingen permanent." } }, "exceptions": { diff --git a/custom_components/tibber_prices/translations/nl.json b/custom_components/tibber_prices/translations/nl.json index c95fe03..c648d2f 100644 --- a/custom_components/tibber_prices/translations/nl.json +++ b/custom_components/tibber_prices/translations/nl.json @@ -1012,6 +1012,52 @@ "mixed": "Gemengd" } }, + "current_price_phase": { + "name": "Huidige Prijsfase", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "flat": "Vlak" + } + }, + "next_price_phase": { + "name": "Volgende Prijsfase", + "state": { + "rising": "Stijgend", + "falling": "Dalend", + "flat": "Vlak" + } + }, + "current_price_phase_end_time": { + "name": "Current Phase End Time" + }, + "current_price_phase_remaining_minutes": { + "name": "Current Phase Remaining" + }, + "current_price_phase_duration": { + "name": "Current Phase Duration" + }, + "current_price_phase_progress": { + "name": "Current Phase Progress" + }, + "next_rising_phase_start_time": { + "name": "Next Rising Phase Start" + }, + "next_falling_phase_start_time": { + "name": "Next Falling Phase Start" + }, + "next_flat_phase_start_time": { + "name": "Next Flat Phase Start" + }, + "next_rising_phase_in_minutes": { + "name": "Time to Next Rising Phase" + }, + "next_falling_phase_in_minutes": { + "name": "Time to Next Falling Phase" + }, + "next_flat_phase_in_minutes": { + "name": "Time to Next Flat Phase" + }, "chart_data_export": { "name": "Grafiekdata Export", "state": { @@ -1069,6 +1115,15 @@ "best_price_period": { "name": "Beste Prijs Periode" }, + "in_rising_price_phase": { + "name": "In Rising Price Phase" + }, + "in_falling_price_phase": { + "name": "In Falling Price Phase" + }, + "in_flat_price_phase": { + "name": "In Flat Price Phase" + }, "connection": { "name": "Tibber API Verbinding" }, @@ -1156,7 +1211,7 @@ }, "currency_display_mode_changed": { "title": "Valutaweergave-eenheid gewijzigd voor {home_name}", - "description": "Je hebt de valutaweergavemodus voor **{home_name}** gewijzigd. Alle prijssensorwaarden en -attributen gebruiken nu de nieuwe eenheid (bijv. 25,34 ct → 0,2534 € of andersom).\n\nHome Assistant’s Recorder toont afzonderlijk een **„De eenheid is gewijzigd“**-dialoogvenster voor getroffen sensoren — dit kan enkele minuten duren of tot de volgende statistiekenrun (logwaarschuwingen verschijnen eerder). Kies dan **Alle oude statistiekgegevens verwijderen** voor een schone start. Kies niet „Eenheid bijwerken zonder conversie“: dat hernoemt de oude getallen zonder de waarden aan te passen, waardoor de historische gegevens inhoudelijk onjuist worden.\n\n**Handmatig controleren:**\n\n1. **Automatiseringen & templates:** Werk alle automatiseringen en template-sensoren bij die numerieke prijsdrempels gebruiken.\n2. **Dashboard-kaarten:** Werk kaarten bij met hardgecodeerde drempelwaarden of eenheidslabels.\n\nSluit deze melding nadat je je automatiseringen en dashboards hebt gecontroleerd." + "description": "Je hebt de valutaweergavemodus voor **{home_name}** gewijzigd. Alle prijssensorwaarden en -attributen gebruiken nu de nieuwe eenheid (bijv. 25,34 ct → 0,2534 € of andersom).\n\nHome Assistant’s Recorder toont afzonderlijk een **„De eenheid is gewijzigd“**-dialoogvenster voor getroffen sensoren — dit kan enkele minuten duren of tot de volgende statistiekenrun (logwaarschuwingen verschijnen eerder). Kies dan **Alle oude statistiekgegevens verwijderen** voor een schone start. Kies niet „Eenheid bijwerken zonder conversie“: dat hernoemt de oude getallen zonder de waarden aan te passen, waardoor de historische gegevens inhoudelijk onjuist worden.\n\n**Handmatig controleren:**\n\n1. **Automatiseringen & templates:** Werk alle automatiseringen en template-sensoren bij die numerieke prijsdrempels gebruiken.\n2. **Dashboard-kaarten:** Werk kaarten bij met hardgecodeerde drempelwaarden of eenheidslabels.\n\nZodra je je automatiseringen, dashboards en statistieken hebt gecontroleerd, ga naar **Instellingen → Integraties → Tibber → Configureren → Weergave-instellingen** en sla op (zonder wijzigingen indien gewenst). Dit is de enige manier om deze melding permanent te sluiten." } }, "exceptions": { diff --git a/custom_components/tibber_prices/translations/sv.json b/custom_components/tibber_prices/translations/sv.json index 1a94e0d..5070fea 100644 --- a/custom_components/tibber_prices/translations/sv.json +++ b/custom_components/tibber_prices/translations/sv.json @@ -1012,6 +1012,52 @@ "mixed": "Blandad" } }, + "current_price_phase": { + "name": "Aktuell Prisfas", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "flat": "Flat" + } + }, + "next_price_phase": { + "name": "Nästa Prisfas", + "state": { + "rising": "Stigande", + "falling": "Fallande", + "flat": "Flat" + } + }, + "current_price_phase_end_time": { + "name": "Current Phase End Time" + }, + "current_price_phase_remaining_minutes": { + "name": "Current Phase Remaining" + }, + "current_price_phase_duration": { + "name": "Current Phase Duration" + }, + "current_price_phase_progress": { + "name": "Current Phase Progress" + }, + "next_rising_phase_start_time": { + "name": "Next Rising Phase Start" + }, + "next_falling_phase_start_time": { + "name": "Next Falling Phase Start" + }, + "next_flat_phase_start_time": { + "name": "Next Flat Phase Start" + }, + "next_rising_phase_in_minutes": { + "name": "Time to Next Rising Phase" + }, + "next_falling_phase_in_minutes": { + "name": "Time to Next Falling Phase" + }, + "next_flat_phase_in_minutes": { + "name": "Time to Next Flat Phase" + }, "chart_data_export": { "name": "Diagramdataexport", "state": { @@ -1069,6 +1115,15 @@ "best_price_period": { "name": "Bästa Prisperiod" }, + "in_rising_price_phase": { + "name": "In Rising Price Phase" + }, + "in_falling_price_phase": { + "name": "In Falling Price Phase" + }, + "in_flat_price_phase": { + "name": "In Flat Price Phase" + }, "connection": { "name": "Tibber API-anslutning" }, @@ -1156,7 +1211,7 @@ }, "currency_display_mode_changed": { "title": "Valutavisningsenhet ändrad för {home_name}", - "description": "Du ändrade valutavisningsläget för **{home_name}**. Alla prissensorvärden och -attribut använder nu den nya enheten (t.ex. 25,34 öre → 0,2534 kr eller tvärtom).\n\nHome Assistants Recorder visar separat en **„Enheten har ändrats“**-dialog för berörda sensorer — det kan ta några minuter eller till nästa statistikkörning (loggvarningar dyker upp tidigare). När den visas, välj **Ta bort alla gamla statistikdata** för en ren start. Välj inte „Uppdatera enheten utan konvertering“: det behåller de gamla talen med ny enhet utan att justera värdena, vilket gör historiska data faktiskt felaktiga.\n\n**Granska manuellt:**\n\n1. **Automatiseringar & mallar:** Uppdatera alla automatiseringar och mallsensorer som använder numeriska priströsklar.\n2. **Dashboard-kort:** Uppdatera kort med hårdkodade tröskelvärden eller enhetsetiketter.\n\nStäng detta meddelande efter att du har granskat dina automatiseringar och dashboards." + "description": "Du ändrade valutavisningsläget för **{home_name}**. Alla prissensorvärden och -attribut använder nu den nya enheten (t.ex. 25,34 öre → 0,2534 kr eller tvärtom).\n\nHome Assistants Recorder visar separat en **„Enheten har ändrats“**-dialog för berörda sensorer — det kan ta några minuter eller till nästa statistikkörning (loggvarningar dyker upp tidigare). När den visas, välj **Ta bort alla gamla statistikdata** för en ren start. Välj inte „Uppdatera enheten utan konvertering“: det behåller de gamla talen med ny enhet utan att justera värdena, vilket gör historiska data faktiskt felaktiga.\n\n**Granska manuellt:**\n\n1. **Automatiseringar & mallar:** Uppdatera alla automatiseringar och mallsensorer som använder numeriska priströsklar.\n2. **Dashboard-kort:** Uppdatera kort med hårdkodade tröskelvärden eller enhetsetiketter.\n\nNär du har granskat dina automatiseringar, instrumentpaneler och statistik, gå till **Inställningar → Integrationer → Tibber → Konfigurera → Visningsinställningar** och spara (utan ändringar om du vill). Det är det enda sättet att permanent stänga det här meddelandet." } }, "exceptions": {