HomeAssistant Historische Werte neu zuordnen

Jeder kennt das Problem, den Name eines Sensors hat sich geändert und damit sind alle historischen Werte in der Datenbank nicht mehr den neuen Sensor zugeordnet, die Historie ist leer.

Über die Datenbank ist es möglich, Werte eines „alten“ Sensors dem neuen Sensor zuzuordnen.
Aber bitte Vorsicht, der Eingriff in die Datenbank kann auch zu Verlust von Informationen führen, bitte immer vorher ein Backup machen.

Um in der Datenbank Werte zu ändern, wir ein AddOn benötigt, es kann wie gewohnt in HA integriert werden.

Nach der Installation sind pro Sensor drei Schritte notwendig, um die historischen Daten eines „alten“ Sensors mit einem neue zu verbinden.

  1. Anzeige der Werte des alten und neuen Sensors, damit wir sicher sind, die richtigen Daten zu übertragen. Dazu diesen SQL-Query in dem AddOn eintragen und laufen lassen. Der Name der Entität, des Sensors muss natürlich angepasst werden
    select *, datetime(start_ts, ‚unixepoch‘, ‚localtime‘) as Statistikdatum from statistics where metadata_id = (SELECT id FROM statistics_meta WHERE statistic_id = „sensor.ENTITÄTSNAME“)
  2. Übertragen der LangzeitstatistikDaten. Dazu diesen Query anpassen und wieder laufen lassen. Auch hier müssen die Namen der beiden Entitäten angepasst werden.
    UPDATE or REPLACE statistics SET metadata_id = (SELECT id FROM statistics_meta WHERE statistic_id = „sensor.NEUER_ENTITÄTSNAME“) WHERE metadata_id = (SELECT id FROM statistics_meta WHERE statistic_id = „sensor.ALTER_ENTITÄTSNAME“)
  3. Übertragen der Kurzzeitstatistiken. Auch hier wieder die Namen anpassen und den Query laufen lassen:
    UPDATE or REPLACE statistics_short_term SET metadata_id = (SELECT id FROM statistics_meta WHERE statistic_id = „sensor.NEUER_ENTITÄTSNAME“) WHERE metadata_id = (SELECT id FROM statistics_meta WHERE statistic_id = „sensor.ALTER_ENTITÄTSNAME“)

Danach sind die historischen Daten des „alten“ Sensors an dem neuen sichtbar und eure Historie bleibt erhalten.

3 Kommentare zu „HomeAssistant Historische Werte neu zuordnen“

  1. Hi Guido, vielen dank für die ausgearbeitete Query.
    In meinem Fall hab ich ein Balkonkraftwerk, welches ich über eine Außensteckdose Tracke, wo auch eine Pumpe mit dranhängt. entsprechend hab ich nun einen shelly PM mini exklusiv für das Balkonkraftwerk angeschlossen.

    Ich würde nun gerne die Historie des alten Sensors (nennen wir ihn sensor.pumpe) zum neuen Sensor (sensor.pv) nicht verschieben sondern kopieren. damit bei der Pumpe die Historie ebenfalls vorhanden bleibt.

    wie würde die Query dann aussehen?

    beste Grüße
    silverSl!DE

    Antworten
    • Hallo silverSl!DE,

      ich hab die Frage mal durch die KI gejagt, also völlig ohne Gewähr. Und wenn du das ausprobierst, bitte im Testsytem, oder mit einen Backup, dass du auch schon mal getestet hast.
      Hier die Antwort der KI:

      Ja, das geht – aber mit UPDATE (Verschieben) wird daraus ein INSERT (Kopieren).

      Kernidee

      Bei der Neuzuordnung schreibt ihr per SQL die metadata_id der alten Zeilen um, sodass sie fortan zum neuen Sensor gehören (die alten Zeilen „gehören“ danach nur noch dem neuen Sensor). Für eine zusätzliche Zuordnung dupliziert ihr die Zeilen stattdessen: Die Originaldaten bleiben beim alten Sensor, eine Kopie bekommt die metadata_id des neuen Sensors.

      Voraussetzung

      Der Ziel-Sensor muss schon mindestens einmal einen Wert geliefert haben, damit er einen eigenen Eintrag in statistics_meta (bzw. states_meta) mit eigener metadata_id hat. Diese neue metadata_id braucht ihr für die Kopie.

      Langzeitstatistiken kopieren
      INSERT INTO statistics (created_ts, metadata_id, start_ts, mean, min, max, last_reset_ts, state, sum)
      SELECT created_ts, , start_ts, mean, min, max, last_reset_ts, state, sum
      FROM statistics
      WHERE metadata_id = ;

      Analog für statistics_short_term. Da jede Zeile über (metadata_id, start_ts) eindeutig ist und ihr eine neue metadata_id verwendet, gibt es keinen Konflikt mit den Original-Daten.

      Worauf man achten sollte!
      Einheit/State-Class: statistics_meta speichert unit_of_measurement und has_mean/has_sum pro Sensor. Passen Einheit oder Sensor-Typ (z.B. total_increasing vs. measurement) nicht zusammen, verzerrt das Energie-Dashboard oder Diagramme.
      sum-Spalte bei Energiesensoren: Die kumulierte Summe ergibt nur Sinn, wenn der Zielsensor dieselbe Zählweise/denselben Nullpunkt hat. Sonst lieber nur state/mean/min/max kopieren und sum weglassen bzw. neu berechnen lassen.

      Rohdaten (states-Tabelle, 10-Tage-Verlauf/Logbook): Technisch auch kopierbar, aber deutlich fummeliger, weil Zeilen über old_state_id/attributes_id/event_id verkettet sind. Diese Referenzen dürfen nicht blind mitkopiert werden (sonst zeigt die Kette auf falsche Zustände) – für die reinen Statistik-/Energie-Diagramme reicht meist das Kopieren in statistics + statistics_short_term.
      Vorher ein Backup anlegen!!!!!!!!
      Also überleg gut, ob du das machen willst.

      Antworten

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.