Zapis zdarzeń do zewnętrznej bazy danych

Opis jak dodać zapis danych do zewnętrznej bazy na przykładzie MySQL

Jest to opis przeznaczony dla osób, które chciałyby wykorzystać Asystenta domowego do logowania większej ilości danych do zdalnej bazy. Może to być wykorzystane np. w wynajmowanym apartamencie do rejestrowania i analizowania poziomu zużycia mediów.

W opisie tym pokażemy jak połączyć się ze zdalną bazą w chmurze, tak żeby każdy mógł to zrobić. W ten sam sposób możemy połączyć Asystenta domowego z bazą w naszej lokalnej sieci.

Założenia wstępne

Mamy dostęp do skonfigurowanej i działającej relacyjnej bazy danych, która jest obsługiwana przez SQLAlchemy https://www.sqlalchemy.org/ (zamiana obiektów Pythona na dane nadający się do zapisania do bazy relacyjnej).

W tym przykładzie pokażemy jak skonfigurować bazę działającą na darmowym hostingu https://remotemysql.com/ 100 Mb za darmo

Dodanie bazy w remotemysql

  • kopiujemy dane dotyczące połączenia z naszą nową bazą

Ustawienia zapisu zdarzeń systemu Asystent domowy

W aplikacji “Asystent domowy” przechodzimy do “Konfiguracja” -> “Konfiguracja bramki AIS dom” -> “Ustawienia zapisu zdarzeń systemu”

  • Konfigurujemy połączenie z bazą MariaDB

  • Sprawdzamy połączenie

  • Doinstalowujemy sterownik do bazy
    w konsoli wpisujemy
pip install pymysql

  • ponownie sprawdzamy połączenie

i je zapisujemy

Dodajemy komponent history

  • edytujemy plik configuration.yaml
nano ~/AIS/configuration.yaml 

i dopisujemy linijkę

history:

zapisujemy plik

  • sprawdzamy poprawność konfiguracji po zmianach

  • restart serwera (ponowne uruchomienie)
    konfiguracja jest poprawna więc możemy bezpiecznie zrestartować serwer, w konsoli restartuejmy usługę ais
pm2 restart ais

Administracja bazą

wracamy do naszej bazy i wybieramy phpMyAdmin

logujemy się na naszą bazę (loginem i hasłem skopiowanym podczas tworzenia bazy)

możemy sprawdzić jakie mamy tabele

ich strukture

i co loguje Asystent domowy

2 polubienia

Cześć,
włączyłem logowanie do własnej bazy danych. Co jakiś czas występowały błędy jak na poniższym screenie, dzisiaj postanowiłem się im przyjrzeć.
Wg mnie błędy wynikają z tego, że są zapisywane polskie znaki i któryś silnik ma z tym problem. Miałem kilka input_select’ów z stanami typu “Wyłączony” zmieniłem je na “OFF” i niby ok, ale teraz jest problem z zapisem stanu prognozy pogody, która jest wbudowana w AIS. Problem ze screenu dotyczy słówka “ciągu”.
W standardowej implementacji recorder’a można dodać exclude: i to był pewnie rozwiązało problem. Pytanie czy to jest dobra droga, bo może polskie znaki jednak powinny zapisywać się poprawnie?
@jolka pomożesz w rozwiązaniu problemu?

Cześć,

chyba wystarczy zmienić kodowanie znaków na utf8 (w bazie którą używasz)

ALTER TABLE states CONVERT TO CHARACTER SET utf8;
ALTER TABLE events CONVERT TO CHARACTER SET utf8; 

PS
Jest to znany problem w HA, wg autorów tego zgłoszenia, HA sam powinien ustawiać kodowanie przy tworzeniu tabel. Jak ktoś to zgłoszenie poprawi w HA to będzie działało z automatu:

Dziękuję. Wdrożyłem, poobserwuję czy się powtórzy i dam znać.

Ok, brak reprodukcji problemu, czyli problem rozwiązany :slight_smile:
Jeszcze raz dziękuję!

1 polubienie

Zarejestowałem się na https://remotemysql.com wszytko pięknie, ale te 100MB wystarczyło mi na 2 dni :scream:
Czy zapis zdarzeń do bazy można też zrobić na pendrive, czy tylko logi systemu?

Tak, najlepiej chyba zainwestować w jakąś kartę SD (max 32G) i można pisać…

Cytując dokumentację:

Gdy system generuje więcej zdarzeń lub gdy chcesz mieć dostęp do historii, to zalecamy zapisywać zdarzenia na zewnętrznym dysku lub w zdalnej bazie danych.

No i teraz pięknie śmiga z zapisem na kartę sd.
Ps. Włożyłem kartę 64GB bo taką miałem pod ręką, czy mogę mieć problem? Pisaliście, że max 32GB.

A ja próbuje i nie wychodzi…
Trzy karty + jeden pendrive a efekt taki jak na screenie czyli tak jak by nie widział karty/pendriva


Po wyjęciu karty z bramki włożeniu do komputera widać że bramka sobie jakieś foldery potworzyła
a
Coś robię źle?
Wersja systemu 0.108.6b0
W logach tak:

Jak wkładasz kartę do bramki to Jolka mówi, że wykryto nowe urządzenie?

Na wersji 0.108.6b0 jak wkładałem kartę to cisza, jak wkładam pendrive to mówi że wykryła.
Zaktualizowałem do 0.108.6b1 i dalej to samo

1212
W katalogu dyski-wymienne pusto
W katalogu dyski-zewnętrzne


Przyłączę sie do tematu bo mam problem z baza danych sqlite na karcie SD.

Mam kartę Sd 8GB włożoną do bramki,
bramka wykrywa ja, montuje pod /mnt/media_rw/26D8-1315
tworzy tez linki do karty:
ls -la ~/dom/dyski-zewnętrzne/ lrwxrwxrwx 1 u0_a38 u0_a38 18 Apr 21 19:30 dysk_1 -> /storage/26D8-1315 i ls -la ~/dom/dyski-wymienne/
lrwxrwxrwx 1 u0_a38 u0_a38 23 Apr 21 19:32 dysk_26D8-1315 -> /mnt/media_rw/26D8-1315

Ustawiam zapis logu na kartę SD i bazę sqlite też na karcie SD:

I tu pojawia się problem.
Karta działa poprawnie bo logi się zapisują ale baza danych ciągle jest pusta a bramka wyświetla historię danych tylko od ostatniego restartu (czyli trzyma nie na karcie a w pamięci)

$ ls -la ~/dom/dyski-zewnętrzne/dysk_1/
total 460576
drwxrwx--x 6 root sdcard_rw      4096 Apr 22 21:26 .
drwxr-xr-x 5 root root            100 Apr 21 19:30 ..
drwxrwx--x 3 root sdcard_rw      4096 Apr 19 11:49 .Spotlight-V100
drwxrwx--x 3 root sdcard_rw      4096 Apr 19 10:57 Android
drwxrwx--x 2 root sdcard_rw      4096 Apr 19 10:57 LOST.DIR
-rwxrwx--x 1 root sdcard_rw      4096 Apr 21 17:30 ais.db
-rwxrwx--x 1 root sdcard_rw       369 Apr 22 02:22 ais.log
-rwxrwx--x 1 root sdcard_rw 471598722 Apr 21 19:31 ais.log.2020-04-21
drwxrwx--x 2 root sdcard_rw      4096 Apr 19 23:14 music

W logu mam tylko:

Co jest grane?

bo taką testowaliśmy i było OK

Czesc @Tomasz, ty masz w logach info “permission denied”

postaramy się to naprawić, pokaż co masz w 2 plikach:

  1. ~/.bash_profile?
cat ~/.bash_profile

  1. /system/etc/permissions/platform.xml

PS
pliki możesz skopiwać na lokalizacje /sdcard a następnie pobrać po ftp i nam wysłać zawartość

cp ~/.bash_profile /sdcard/bash_profile
cp /system/etc/permissions/platform.xml /sdcard/platform.xm

image

1 polubienie

sprawdzamy, jak jest tak jak piszesz to znaczy, że jest błąd - poprawimy

faktycznie, zapis bazy do pliku miał :bug:
poprawione :bug: :gun: , dzięki @Belamy za info
poprawka będzie w kolejnej beta :wave:

1 polubienie


żeby wyświetlić zawartość pliku trzeba wpisać polecenie cat

cat /system/etc/permissions/platform.xml

ten plik platform.xml jest troche większy, żeby było widać to co chcemy przewiń do

permission name="android.permission.WRITE_EXTERNAL_STORAGE"

i pokaż co jest w tym elemencie?

ok - to tu jest problem, podmienimy ten plik:

  1. pobieramy plik
curl -o "/data/data/pl.sviete.dom/.ais/platform.xml" -L  https://raw.githubusercontent.com/sviete/AIS-utils/master/patches/platform.xml
  1. podmieniamy plik
su -c "mount -o rw,remount,rw /system && cp /data/data/pl.sviete.dom/.ais/platform.xml /system/etc/permissions/platform.xml"
  1. sprawdzamy
cat /system/etc/permissions/platform.xml

jeżeli WRITE_EXTERNAL_STORAGE będzie tak jak trzeba, to restart i zapis na dyski powinien już działać OK

<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
        <group gid="sdcard_rw" />
        <group gid="media_rw" />
 </permission>