Ukládání dat
Ve výchozí instalaci Home Assistanta se provádí veškeré logování historie do souborové databáze SQLite, která je výborná s malým počtem entit a krátkou historií. Správná volba databáze je klíčová pro optimální výkon a správu dat.
Jak můžete vidět níže, dotazy umí SQLite opravdu dobře, ale jakmile dojde k DML operacím -insert,update, a delete - začne být pomalejší.

Porovnání výkonu různých databázových operací
Hodnoty v grafu označují počet nanosekund potřebných na jednu operaci. Menší je lepší.
Další vlastností SQLite je, že běží na stejném stroji a disku jako Home Assistant, což může být v závislosti na situaci výhodou i nevýhodou.
Odmazávání historických dat
V případě, že začíná být Home Assistant velmi pomalý a nepotřebujete příliš historii přímo v něm, je užitečný parameter purge_keep_days. Tento parametr umožňuje nastavit počet dní, které se uchovávají v DB. Výchozí hodnota je 10 dní a k odmazávání dat dochází vždy každý den v 4:12 lokálního času.
# Použijte jen jedno db_url podle DB do které chcete HA napojit
recorder:
...
purge_keep_days: 14 # pokud chceme zachovat 2 týdny dat
Podporované databáze
- SQLite ≥ 3.31.0 (2020)
- MariaDB ≥ 10.3 (2017) a MySQL ≥ 8.0 (2018)
- PostgreSQL ≥ 12 (2019)
Nastavení připojení dle DB
Pro připojení do všech databází používá HA jednotnou knihovnu SQLAlchemy, díky čemuž je konfigurace připojení pro všechny databáze velmi podobná.
# Použijte jen jedno db_url podle DB do které chcete HA napojit
recorder:
# SQLite
db_url: sqlite:////cesta/k/db_souboru
# MySQL nebo MariaDB
db_url: mysql://uzivatel:heslo@server/databaze?charset=utf8mb4
# PostgreSQL
db_url: postgresql://uzivatel:heslo@server/databaze
Další nastavení recorderu
Kromě nastavení připojení do databáze můžeme v konfiguračním souboru HA definovat odfiltrování (exclude) entit, které se budou zaznamenávat do DB.
recorder:
db_url: !secret postgre_conn
exclude:
# Odstranění celých domén
domains:
- automation
- update
# Odstranění konkrétních entit
entities:
- sun.sun
Instalace databáze
MariaDB
Pokud máte v HA k dispozici doplňky, můžete využít instalaci MariaDB tímto způsobem. V konfiguraci bude potřeba pouze nastavit heslo do databáze, které není ve výchozí instalaci doplněno a doplněk spustit.
Záloha databáze
SQLite
Pokud používáte SQLite, který je standardní součástí a výchozí konfigurací HA, pak je datový soubor součástí zálohy Home Assistanta a stačí pak provést tuto zálohu.

MariaDB/MySQL
Pokud používáte MariaDB jako doplněk HomeAssistanta, což doporučuji, pak nejjednodušším způsobem zálohy MariaDB je záloha celého doplňku.

Alternativně můžete použít svého oblíbeného klienta pro MySQL/MariaDB, pokud v sobě obsahuje podporu záloh, nebo si v terminálu doinstalovat utilitu mysqldump.
Instalace mysqldump v Ubuntu/Debian
sudo apt update
sudo apt install mariadb-client
mysqldump --version
Použití mysqldump pro zálohu
mysqldump -h [mariadb_server_ip] -P [port] -u [username] -p[password] [database_name] > [backup_file].sql
Příklad zálohy MariaDB běžící na lokálním stroji:
mysqldump -h 127.0.0.1 -u homeassistant -phomeassistant homeassistant > bck_homeassistant.sql
Migrace mezi databázemi
Můžete se dostat do situace, kdy jste na začátku zvolili jednu databázi (nebo jste prostě nechali výchozí SQLite) a nyní bystě chtěli začít používat jinou. V ideálním případě byste určitě rádi zachovali i všechny data, které už v databázi máte. A to je naštěstí možné.
MariaDB/MySQL -> PostgreSQL
Následuje způsob pro přechod z MariaDB/MySQL na PostgreSQL, ale kroky na všechny ostatní kombinace databází by měly být velmi podobné.
V návodu níže předpokládám, že už máte nainstalovanou a zprovozněnou PostgreSQL databázi.
1. Zastavení ukládání do DB
Prvním krokem který doporučuji je zastavení zaznamenávání do databáze, což můžeme udělat zavoláním služby recorder.disable. Díky tomuto kroku můžeme bez obav stáhnout data z databáze bez nutnosti zastavovat Home Assistant.
2. Konverze dat z MySQL/MariaDB na PostgreSQL
Instalace pgloader v Ubuntu/Debian
sudo apt-get update
sudo apt-get install pgloader
Instalace pgloader na MacOS
brew install pgloader
Konverze dat
-
vytvoříme definiční soubor pro konverzi a uložíme ho jako soubor
mysql-to-postgres.load- použijte váš oblíbený editor.mysql-to-postgres.loadLOAD DATABASE
FROM mysql://homeassistant:[email protected]/homeassistant
INTO postgresql://homeassistant:[email protected]/homeassistant
WITH include drop, create tables, create indexes, reset sequences,
workers = 8, concurrency = 1,
multiple readers per thread, rows per range = 50000
SET work_mem to '32 MB', maintenance_work_mem to '64 MB'; -
tento soubor pomocí pgloaderu spustíme:
pgloader mysql-to-postgres.load
Může se stát, že máte DB vytvořenou ve starší verzi Home Assistanta a obsahuje stále sloupce, které už nejsou potřeba a bude pravděpodobně prázdné. Tyto sloupce pak mohou způsobit problém při migraci a bohužel není možné je jen odstranit, ale změnit typ obvykle na char(1).
Aktuální definici tabulek HA najdete zde.
3. Přehození DB v konfiguraci a zapnutí ukládání
- v
configuration.yamlsouboru HA změníme nastavení recorderu, tak jak jsme si ukázali v kapitole výše. - zapneme ukládání do DB zavoláním služby
recorder.enable
Komentáře