Utrata danych w panelu energia

Od kilku dni mam problem z utratą danych historycznych w panelu energia (i zapewne wszystkich innych też, ale te nie są istotne). Nagle wszystko co było wcześniej znika. Znika także z dysku, bo backup po takim zniknięciu ma ok 147, podczas gdy poprzednie miały w okolicach 475.

Oczywiście odtworzyłem z backupu i dane się pojawiły, ale kilka godzin później znów znikają…
Pomyślałem, że może coś się porobiło z danymi już w tym backupie, więc cofnąłem się do jeszcze poprzedniego - działało 12 godzin, dane zniknęły.

Ktoś może mi coś podpowiedzieć?
Instalacja na RASP, standardowa baza z HA na karcie w RASP.

1.Jakieś konkretne urządzenia które gubią dane ?
2. Masz ustawione purge DB na jakiś określony czas ?
3. Urządzenia przestały wysyłać dane ?
4. Jakąś aktualizacja coś zmieniła ?

  1. Wszystkie
  2. Nic nie ustawiałem
  3. Nie
  4. Nie

Ale chyba mam więcej już wiedzy.
Generalnie tracę dane codziennie o 4 z minutami, czyli usuwa mi je wbudowany serwis HA. W wyniku jego działania tworzy pusty plik home_assistant_v2.db oraz powstaje drugi (duży, więc pewnie pełny) home_assistanr_v2.db.corrupt.data_i_godzina.

Zakładam więc, że plik z danymi jest w jakiś sposób uszkodzony i automat czyszczący nie radząc sobie z nim zrzuca go do backupu i tworzy od nowa czysty plik. Ja go przywracam z kopii i o 4 z minutami się powtarza.

No i powstaje pytanie:

  1. jak naprawić uszkodzony plik?
  2. lub: Jak skopiować z niego dane zanim automat go usunie?
  3. Jak wyłączyć automat do czasu poradzenia sobie z uszkodzeniem?

Edit: na pytanie 3 znalazłem odpowiedź.

HA Recorder

auto_purge boolean (optional, default: true)

Automatically purge the database every night at 04:12 local time. Purging keeps the database from growing indefinitely, which takes up disk space and can make Home Assistant slow. If you disable auto_purge it is recommended that you create an automation to call the recorder.purge periodically.

https://www.home-assistant.io/integrations/recorder/
Wygląda na to że jest z automatu czyszczona jest Baza o wskazanej godzinie 4:12
Jeżeli chcesz to zmienić czas przechowywania danych musisz dodać konfiguracje dla Recordera w pliku configuration.yaml

Tu przykład z mojej konfiguracji

recorder:
  db_url: !secret mariadb_url
  purge_keep_days: 20
  exclude:
    domains:
      - automation
      - weblink
      - updater
      - media_player
      - switch
      - climate
      - camera
      - zone
      - input_boolean
      - input_number
      - input_select
      - input_text
      - light
      - media_player
      - sun
      - timer
      - weather

Zastanów się nad przejściem na inną bazę np. MariaDB

To chyba niepełna odpowiedz.

Tak, ma to ewidentny związek z czyszczeniem bazy o 4:12
Ale system powinien wtedy czyścić bazę z zapisów starszych niż 10 dni i tak to przez lata robił (zostawiając magicznie zapisy dot. panelu energia, tu był dostęp do wszystkich danych), teraz po prostu wrzuca pusty plik z danymi a poprzedni wyrzuca do “corrupt”. Zatem - coś się popsuło i nie jest to kwestia ustawień.

Tak, rozważam przeniesienie się na mariadb, tyle, że ja mam instalację na RASP a wrzucanie bazy danych na kartę SD nie ma sensu. Kupiłem sobie właśnie zewnętrzny dysk SSD który będę chciał podpiąć pod RASP, tyle, że nigdzie nie znalazłem informacji jak uruchomić mariaDB na zewnętrznym dysku. No i pozostaje pytanie o dane historyczne, czyli te o które walczę. Czy po podłączeniu zewnętrznej bazy mogę jakoś przerzucić dotychczasowe informacje?

Jak cos się popsuło z niczego to obstawiam błędy zapisu, czyżby karta SD kończyła żywot ?
Szczerz teraz nie pamiętam czy dane są przenoszone automatycznie przy zmianie Bazy czy trzeba sobie je ręcznie przenieść.

Przez lata też wiele się zmieniło w konfiguracji Bazy danych.

Tak, masz rację to HA usuwa dane (a właściwie cała bazę - home_assistanr_v2.db.corrupt.data_i_godzina to plik uszkodzony, z którego HA nie korzysta), robi to celowo, bo plik bazy danych masz uszkodzony.

Licząc się z utratą części danych możesz spróbować backupu wcześniejszego niż ten, z którego przywracasz bazę (prawdopodobnie przywracasz uszkodzoną).

Raz w życiu naprawiałem bazę sqlite parę lat temu przy pomocy sqlite-tools, niestety szczegółów nie jestem w stanie podać, ale korzystałem z jakieś ściągawki znalezionej w internecie
(poniżej tylko przykład, niestety nie zapisałem sobie linka na przyszłość, ale jestem prawie pewien, że podpowiedź znalazłem na stackoverflow, opisy z linka brzmią dość wiarygodnie, tj. robiłem to w jakiś w miarę podobny sposób, ale poszukaj jednak samodzielnie alternatywnych rozwiązań)

Zajęło mi to jakieś 3 dni, a naprawiona baza i tak nie zawierała wszystkiego (dlatego sugeruję użyć wcześniejszy backup w którym masz bazę jeszcze nieuszkodzoną).
Potem zmigrowałem z RPi na x64 :stuck_out_tongue:

Ale powiem tak - od paru lat uszkodzić sqlite w HA jest raczej trudno - HAOS przy starcie systemu naprawia pliki, a baza jest też automatycznie naprawiana bodajże przy starcie HA.

Swoją drogą moje 2 instalacje przeżyły setki zaników zasilania, a oprócz tego jednego razu nie miałem problemów (teraz jedna z instalacji ma UPSa, a w drugiej nie doświadczam tak częstych zaników zasilania - naprawiono instalację w bloku).

Ale na RPi może po prostu karta skończyła żywot (RPi3 i RPi4 wspierają możliwość pracy na ssd podpiętym przez USB i to zarówno jako jedynym nośniku, jak i z bootowaniem HAOS z karty, a dyskiem tylko na dane).

PS Doświadczyłem też parę razy sytuacji odpięcia dysku w obudowie USB od RPI w trakcie pracy i w zasadzie to przeważyło szalę na korzyść x64.

Czy jest jakiś prosty sposób by zmigrować dane z natywnej bazy HA do MariaDB?

Chyba prostego nie ma, raczej hardcore
https://community.home-assistant.io/t/migrating-home-assistant-database-from-sqlite-to-mariadb-only-if-you-are-very-familiar-with-database-administration/96895

1 Like