🔴 Relacyjna Baza danych PostgreSQL

Opis jak zainstalować bazę danych PostgreSQL na bramce DEV

:warning: Opis ten ma charakter “edukacyjny” podobnie jak w przypadku Node-RED lub innych rzeczy, które można instalować na bramce, nie jest to coś, co rekomendujemy czy wspieramy.

Być może komuś ten opis się przyda, bo dzięki temu będzie miał stabilnie działający, prawdziwy relacyjny bazodanowy serwer na bramce. Poza programowaniem w Python, Nodejs i C będzie mógł też robić zapytania w SQL czy inne fajne rzeczy :wink:

Ktoś inny może przesadzić i zacząć logować za dużo dni i skończy mu się miejsce, albo ilość zdarzeń, które zapisuje do bazy spowoduje destabilizację działania systemu.
W takim przypadku rozwiązanie jest jedno - wyłączenie rejestrowania zdarzeń w systemie i powrót do stabilnej wersji poprzez pełny reset aplikacji.

Zanim przejdziesz dalej, zastanów się czy naprawdę potrzebujesz rejestrować zdarzenia na bramce? Pamiętaj, że jeśli np. używasz integracji, które co sekundę wykonują jakieś działania, to możesz bardzo szybko wyprodukować plik, który będzie miał kilka GB i z którym sobie nie porodzisz. W takim przypadku odesłanie sprzętu do serwisu będzie wiązać się z kosztami, bo nikt nie chce pracować za darmo.


Jeżeli przechodzisz dalej to znaczy, że rozumiesz zagrożenie, panujesz nad tym, jak działają Twoje integracje, ile rzeczy logują i generalnie jesteś świadomy tego, jaką moc posiadasz i co robisz.


Instalacja bazy

  1. przełącz się na nasze najnowsze repozytorium pakietów apt i wykonaj aktualizację systemu - opis krok po kroku w tym wpisie
  1. zainstaluj binarkę PostgreSQL
apt install postgresql
  1. zainstaluj pakiet Python do komunikacji z bazą PostgreSQL
pip install psycopg2

Konfiguracja i sprawdzenie działania serwera bazodanowego

  1. Tworzymy katalog, w którym serwer bazodanowy będzie przechowywał pliki bazy danych
mkdir -p $PREFIX/var/lib/postgresql
  1. Inicjujemy serwer bazy danych
initdb $PREFIX/var/lib/postgresql
  1. Uruchamiamy serwer bazy danych
pg_ctl -D $PREFIX/var/lib/postgresql start

tu powinieneś zobaczyć coś takiego w konsoli:

  1. Tworzymy użytkownika bazy danych o nazwie ais
createuser --superuser --pwprompt ais

zapytani o hasło, które mamy ustawić, możemy podać dom i jeszcze raz potwierdzić to samo hasło:

image

  1. Tworzymy bazę o nazwie ha
createdb ha
  1. Otwieramy bazę ha
psql ha

image

tu możemy robić zapytania, tworzyć tabele, procedury i wszystko to, co potrafimy zrobić znając język SQL

wychodzimy wpisując

exit
  1. zatrzymujemy serwer bazodanowy
pg_ctl -D $PREFIX/var/lib/postgresql stop

Dodanie serwera do usług na bramce

Chodzi o to, żeby serwer startował automatycznie tak jak inne usługi, które mamy na bramce

pm2 start postgres --name db --output  /dev/null --error  /dev/null --restart-delay=150000 -- -D /data/data/pl.sviete.dom/files/usr/var/lib/postgresql

efekt powinien być taki:

zapisujemy procesy

pm2 save

Konfiguracja połączenia z serwerem w aplikacji Asystent domowy

po restartcie usługi ais

pm2 restart ais

jeżeli w konfiguracji mamy włączony logbook

# przykład wpisów w configuration.yaml
logbook:

to po ponownym uruchomieniu asystenta zobaczymy, że zdarzenia są brane z lokalnej / działającej na bramce bazy danych

dla pewności możemy sprawdzić to w konsoli, łącząc się ponownie z bazą danych ha i wykonując komendę \dt która wylistuje nam table w bazie ha

psql ha
\dt

żeby zobaczyć więcej informacji o bazie, można wykonać komendę

\dt+

i jeszcze przykład, żeby zobaczyć, co mam w tabeli ze stanami:

select domain, entity_id, state from states;

Profesjonalna baza stosowana jako podstawa do biznesu przez ogromną liczbę firm, w tym:

  • Uber
  • Netflix
  • Instagram
  • Spotify

oraz tysiące innych:

Gotowa do rejestrowania :red_circle: zdarzeń w Twoim domu :houses:

1 polubienie

Czy ktoś może ma bazę PostgreSQL na Synology?
Wiem, że można zrobić w dockerze
ale do końca nie jestem pewien czy baza danych w kontenerze to dobry pomysł…
Macie jakieś doświadczenie w tym temacie ?

Edit
Z tego co wyczytałem to PostgreSQL nie jest oficjalnie obsługiwany przez firmę Synology, bo DSM używa PostgreSQL wewnętrznie do zarządzania serwerem NAS. Zostaje tylko docker lub nie wspierane rozwiązania np.:

  1. Managing PostgreSQL on a Synology Server – SGMedia (sondregronas.com)
  2. tutorials:mairlistdb:setup-postgresql [mAirList Wiki]

Mam mariedb na synology, bezproblemowo z AIS działa.

Mam też mariadb w dockerze. I jeszcze eclipse-mosquitto, influxdb, grafanę, telegraf i chronograf. No problemo.

1 polubienie

Zainstalowałem pakiety dla bazy PostgreSQL na DEV3 (zgodnie ze wskazówkami @jolka) W dzienniku HA otrzymuję historię zdarzeń. Jedynie nie jestem pewien czy wszystko będzie przebiegać dobrze w czasie. Zapis ustawiony na 30dni przy prawie standardowych ustawieniach filtrowania zapisu.
Nie otrzymuję tabeli dla szczegółów domen czy encji.
Otrzymuję po komendzie select domain, entity_id, state from states; mam poniższą odpowiedź dotyczącą brakującej biblioteki libmagic.so:

CANNOT LINK EXECUTABLE "more": library "libmagic.so" not found

Czy to coś problematycznego dla działania bazy?

EDIT
@jolka - podbiję temat… czy mogę jakoś dodać bilbioteki libmagic.so?
Czy komunikat CANNOT LINK EXECUTABLE "more": library "libmagic.so" not found zignorować?

1 polubienie

Dodajemy czujnik wskazujący wielkość bazy danych:

Jak Powinna wyglądać przykładowa konfiguracja sensora wielkości bazy danych PostgreSQL , zainstalowanych zgodnie z wskazówkami z tego tematu?

Odpowiedź poniżej:

sensor:
  - platform: sql
    db_url: postgresql://ais:dom@localhost/ha
    queries:
      - name: DB size
        query: "SELECT (pg_database_size('ha')/1024/1024) as db_size;"
        column: "db_size"
        unit_of_measurement: MB

Mam kolejny sensor do zestawu na bramce (278MB o 4-dniach):

4 polubienia

Pytanie do posiadaczy bazy danych na dysku wewnętrznym bramki. Jak zmienić domyślną ilość dni zapisu powyżej 10dni. Obecnie PostgeSQL mam za DEV3 i pomimo konfiguracji w GUI jak poniżej, zapisu 30dni historii. Baza ma w/g historii w HA 10dni.

Ja mam zapis na Synology i też mi nie zapisywało po takiej konfiguracji jak u Ciebie. Musiałem dodać w recorder wpis:
purge_keep_days:30

1 polubienie

Dzięki, tak przypuszczałem. Teraz się upewniłem, a za 11 dni pewnie potwierdzę.

obraz

Podbijam temat - również mam ten problem, np na fundamentalnym poleceniu “more”

Proszę o sugestię

Czy jest możliwość ustawienia bazy PostgreSQL, aby miała różne długości czasu przechowywania, zależnie od podziału na encje?

Np. automation były przechowywane 5 dni, a sensor 30 dni.

@bartas87poz tak, poczytaj oryginalną dokumentację Recorder - Home Assistant, w przypadku AIS - Konfiguracja bramki - Logi i baza danych | AI-Speaker.

Nie wiem, czy się dobrze zrozumieliśmy.
Jest możliwość filtrowania według: domains, entity_globs, entities.
Co powoduje że wybrane wartości są w ogóle rejestrowane.

Ale nie znalazłem nigdzie parametru który mógłbym zadeklarować inny czas przechowywania dla różnych encji.

Np.
include:
domains - > sensor
purge_keep_days: 30
domains - > light
purge_keep_days: 90

Takie coś możesz spróbować uzyskać modyfikujac rekordy bezpośrednio w bazie.

@Cezary.K jak zrobiłeś sensor dysku wewnętrznego bramki, tzn. chodzi mi co wpisałeś po “arg:” ?

  • type: disk_use
    arg: /

Nie bardzo wiem o co pytasz. Wszystko co zrobiłem to dopisanie tych paru wierszy konfiguracji sensora, które zamieściłem w poście. Podajesz tylko url do bazy. Kierowałem się dokumentacją HA dla sensora SQL.

Chodzi mi o wolne miejsce na dysku wewnętrznym tym 128GB
Bo u mnie pokazuje to:
image

@Cezary.K A to nie Twoje?

Moje, ewoluowało…
Nadal nie wiem z czym masz problem?
Mam encje stworzone wg dokumentacji z HA:

Do tego dołożyłem wpis koniguracji pod sensor temperatury procesora.

A na końcu sensor SQL.

Nazwy encji zmieniałem na własne.