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ší.
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.yaml
souboru 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