Wracam, bo jest jeden pozytyw - zaczekałem z próbami przywrócenia starej bazy - i same negatywy, bo sytuacja się powtórzyła, choć delikatnie inaczej.
Rano znów brak historii starszej, niż ostatni backup, tym razem bez zgłoszenia błędu w sekcji kopii zapasowych:
Zatem, zaglądamy głębiej, w dzienniku trzy błędy:
Rejestrator: homeassistant.helpers.recorder
Źródło: helpers/recorder.py:96
Pierwsze zdarzenie: 04:12:36 (1 zdarzenia)
Ostatnio zalogowany: 04:12:36
Error executing query
Traceback (most recent call last):
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1964, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 942, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.DatabaseError: database disk image is malformed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/recorder.py", line 96, in session_scope
yield session
File "/usr/src/homeassistant/homeassistant/components/recorder/purge.py", line 88, in purge_old_data
has_more_to_purge |= _purge_states_and_attributes_ids(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
instance, session, states_batch_size, purge_before
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/src/homeassistant/homeassistant/components/recorder/purge.py", line 203, in _purge_states_and_attributes_ids
_purge_state_ids(instance, session, state_ids)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/recorder/purge.py", line 466, in _purge_state_ids
disconnected_rows = session.execute(disconnect_states_rows(state_ids))
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2365, in execute
return self._execute_internal(
~~~~~~~~~~~~~~~~~~~~~~^
statement,
^^^^^^^^^^
...<4 lines>...
_add_event=_add_event,
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2251, in _execute_internal
result: Result[Any] = compile_state_cls.orm_execute_statement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self,
^^^^^
...<4 lines>...
conn,
^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/bulk_persistence.py", line 1648, in orm_execute_statement
return super().orm_execute_statement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
session,
^^^^^^^^
...<4 lines>...
conn,
^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/context.py", line 305, in orm_execute_statement
result = conn.execute(
statement, params or {}, execution_options=execution_options
)
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1416, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/sql/lambdas.py", line 597, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1638, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1843, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1983, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2352, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1964, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 942, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
sqlalchemy.exc.DatabaseError: (sqlite3.DatabaseError) database disk image is malformed
[SQL: UPDATE states SET old_state_id=? WHERE states.old_state_id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,(...) ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ?)]
[parameters: (None, 7159808, 7159809, 7159810, 7159811, 7159812, 7159813, 7159814, 7159815, 7159816, 7159817, 7159818, 7159819, 7159820, 7159821, 7159822, 7159823, 7159824, 7159825, 7159826, 7159827, 7159828, 7159829, 7159830, 7159831, 7159832, 7159833, 7159834, 7159835, 7159836, 7159837, 7159838, 7159839, 7159840, 7159841, 7159842, 7159843, 7159844, 7159845, 7159846, 7159847, 7159848, 7159849, 7159850, 7159851, 7159852, 7159853, 7159854, 7159855, 7159856 ... 3901 parameters truncated ... 7159758, 7159759, 7159760, 7159761, 7159762, 7159763, 7159764, 7159765, 7159766, 7159767, 7159768, 7159769, 7159770, 7159771, 7159772, 7159773, 7159774, 7159775, 7159776, 7159777, 7159778, 7159779, 7159780, 7159781, 7159782, 7159783, 7159784, 7159785, 7159786, 7159787, 7159788, 7159789, 7159790, 7159791, 7159792, 7159793, 7159794, 7159795, 7159796, 7159797, 7159798, 7159799, 7159800, 7159801, 7159802, 7159803, 7159804, 7159805, 7159806, 7159807)]
(Background on this error at: https://sqlalche.me/e/20/4xp6)
Z poniższego wycinam setki znaków zapytania, bo się nie mieści:
Rejestrator: homeassistant.components.recorder.core
Źródło: components/recorder/core.py:892
integracja: Recorder (dokumentacja, Problemy)
Pierwsze zdarzenie: 04:12:36 (1 zdarzenia)
Ostatnio zalogowany: 04:12:36
Unrecoverable sqlite3 database corruption detected: (sqlite3.DatabaseError) database disk image is malformed [SQL: UPDATE states SET old_state_id=? WHERE states.old_state_id IN (?, ?, ?, (...) ?, ?)] [parameters: (None, 7159808, 7159809, 7159810, 7159811, 7159812, 7159813, 7159814, 7159815, 7159816, 7159817, 7159818, 7159819, 7159820, 7159821, 7159822, 7159823, 7159824, 7159825, 7159826, 7159827, 7159828, 7159829, 7159830, 7159831, 7159832, 7159833, 7159834, 7159835, 7159836, 7159837, 7159838, 7159839, 7159840, 7159841, 7159842, 7159843, 7159844, 7159845, 7159846, 7159847, 7159848, 7159849, 7159850, 7159851, 7159852, 7159853, 7159854, 7159855, 7159856 ... 3901 parameters truncated ... 7159758, 7159759, 7159760, 7159761, 7159762, 7159763, 7159764, 7159765, 7159766, 7159767, 7159768, 7159769, 7159770, 7159771, 7159772, 7159773, 7159774, 7159775, 7159776, 7159777, 7159778, 7159779, 7159780, 7159781, 7159782, 7159783, 7159784, 7159785, 7159786, 7159787, 7159788, 7159789, 7159790, 7159791, 7159792, 7159793, 7159794, 7159795, 7159796, 7159797, 7159798, 7159799, 7159800, 7159801, 7159802, 7159803, 7159804, 7159805, 7159806, 7159807)] (Background on this error at: https://sqlalche.me/e/20/4xp6)
Traceback (most recent call last):
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1964, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 942, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.DatabaseError: database disk image is malformed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/recorder/core.py", line 892, in _process_one_task_or_event_or_recover
task.run(self)
~~~~~~~~^^^^^^
File "/usr/src/homeassistant/homeassistant/components/recorder/tasks.py", line 120, in run
if purge.purge_old_data(
~~~~~~~~~~~~~~~~~~~~^
instance, self.purge_before, self.repack, self.apply_filter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/usr/src/homeassistant/homeassistant/components/recorder/util.py", line 642, in wrapper
return job(*args, **kwargs)
File "/usr/src/homeassistant/homeassistant/components/recorder/purge.py", line 88, in purge_old_data
has_more_to_purge |= _purge_states_and_attributes_ids(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
instance, session, states_batch_size, purge_before
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/src/homeassistant/homeassistant/components/recorder/purge.py", line 203, in _purge_states_and_attributes_ids
_purge_state_ids(instance, session, state_ids)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/recorder/purge.py", line 466, in _purge_state_ids
disconnected_rows = session.execute(disconnect_states_rows(state_ids))
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2365, in execute
return self._execute_internal(
~~~~~~~~~~~~~~~~~~~~~~^
statement,
^^^^^^^^^^
...<4 lines>...
_add_event=_add_event,
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 2251, in _execute_internal
result: Result[Any] = compile_state_cls.orm_execute_statement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self,
^^^^^
...<4 lines>...
conn,
^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/bulk_persistence.py", line 1648, in orm_execute_statement
return super().orm_execute_statement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
session,
^^^^^^^^
...<4 lines>...
conn,
^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/orm/context.py", line 305, in orm_execute_statement
result = conn.execute(
statement, params or {}, execution_options=execution_options
)
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1416, in execute
return meth(
self,
distilled_parameters,
execution_options or NO_OPTIONS,
)
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/sql/lambdas.py", line 597, in _execute_on_connection
return connection._execute_clauseelement(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
self, distilled_params, execution_options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1638, in _execute_clauseelement
ret = self._execute_context(
dialect,
...<8 lines>...
cache_hit=cache_hit,
)
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1843, in _execute_context
return self._exec_single_context(
~~~~~~~~~~~~~~~~~~~~~~~~~^
dialect, context, statement, parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1983, in _exec_single_context
self._handle_dbapi_exception(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
e, str_statement, effective_parameters, cursor, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 2352, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py", line 1964, in _exec_single_context
self.dialect.do_execute(
~~~~~~~~~~~~~~~~~~~~~~~^
cursor, str_statement, effective_parameters, context
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py", line 942, in do_execute
cursor.execute(statement, parameters)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
sqlalchemy.exc.DatabaseError: (sqlite3.DatabaseError) database disk image is malformed
[SQL: UPDATE states SET old_state_id=? WHERE states.old_state_id IN (?, ?, ?, (...)?, ?, ?)]
[parameters: (None, 7159808, 7159809, 7159810, 7159811, 7159812, 7159813, 7159814, 7159815, 7159816, 7159817, 7159818, 7159819, 7159820, 7159821, 7159822, 7159823, 7159824, 7159825, 7159826, 7159827, 7159828, 7159829, 7159830, 7159831, 7159832, 7159833, 7159834, 7159835, 7159836, 7159837, 7159838, 7159839, 7159840, 7159841, 7159842, 7159843, 7159844, 7159845, 7159846, 7159847, 7159848, 7159849, 7159850, 7159851, 7159852, 7159853, 7159854, 7159855, 7159856 ... 3901 parameters truncated ... 7159758, 7159759, 7159760, 7159761, 7159762, 7159763, 7159764, 7159765, 7159766, 7159767, 7159768, 7159769, 7159770, 7159771, 7159772, 7159773, 7159774, 7159775, 7159776, 7159777, 7159778, 7159779, 7159780, 7159781, 7159782, 7159783, 7159784, 7159785, 7159786, 7159787, 7159788, 7159789, 7159790, 7159791, 7159792, 7159793, 7159794, 7159795, 7159796, 7159797, 7159798, 7159799, 7159800, 7159801, 7159802, 7159803, 7159804, 7159805, 7159806, 7159807)]
(Background on this error at: https://sqlalche.me/e/20/4xp6)
Rejestrator: homeassistant.components.recorder.util
Źródło: components/recorder/util.py:307
integracja: Recorder (dokumentacja, Problemy)
Pierwsze zdarzenie: 04:12:36 (1 zdarzenia)
Ostatnio zalogowany: 04:12:36
The system will rename the corrupt database file //config/home-assistant_v2.db to //config/home-assistant_v2.db.corrupt.2025-03-30T02:12:36.772013+00:00 in order to allow startup to proceed
Od poprzeniej awarii całość działała bezproblemowo, jedyne do czego mogę się przyczepić to to, że czasem właśnie ta historia sensorów ładowała się dosyć długo.
Wracając historycznie - cały HA działał bez problemów do czasu dołączenia dwóch komponentów - Solarmana oraz JK-BMS - czyli tego, po co go w ogóle postawiłem. Wspominam o tym dlatego, że rzeczywiście pewnie dopiero wtedy zaczął się jakikolwiek poważniejszy ruch z bazą danych, bo wcześniejsze czujniki temperatury oraz zdarzeń związanych z PC Viessmanna to było nic, w porównaniu.
Ostatni pomysł, to nieporadzenie sobie ze zmianą czasu, ale to chyba aż niemożliwe.
Zaniki napięcia odpadają, fizyczne działanie na sprzęcie również, bo po poprzedniej akcji dodatkowo zabezpieczyłem dostęp postronnym łapom i pazurom.