Rozdział 5. Dla developerów

Spis treści

5.1. Baza danych
5.2. Demon
5.3. Urządzenia I2C

5.1. Baza danych

Ten rozdział opisuje strukturę bazy MySQL. Przedstawiono w nim schemat poszczególnych tabel. Opis każdej tabeli składa się z siedmiu kolumn. Znaczenie poszczególnych kolumn to:

  1. Nazwa pola

  2. Typ przechowywanych danych

  3. Wartość logiczna określająca, czy dane pole w tabeli może przechowywać wartość niezdefiniowaną (null).

  4. Typ klucza. Może przyjmować jedną z wartości:

    • PRI - oznacza, że kolumna to klucz podstawowy

    • MUL - ???

    • UNI - oznacza, że wartość przechowywana w tym polu jest unikalna dla całej tabeli

  5. Wartość domyślna jaką przyjmie baza danych w przypadku kiedy nie zostanie podana żadna wartość. Znak myślnika oznacza, że pole nie ma zdefiniowanej domyślnej wartości.

  6. Określa dodatkowe właściwości pola. Może przyjmować jedną z wartości:

    • auto_increment - oznacza, że kolejno dodawane rekordy będą automatycznie inkrementowane

  7. Dodatkowe informacje dotyczące danego pola

Schemat bazy danych nie zawiera pól typu DATETIME. Daty są przechowywane w formacie timestamp[1] w polu o typie INT.

Tabela 5.1. Spis tabel

NazwaOpis
interfacesZawiera dane interfejsów (wejść i wyjść)
logsZawiera logi systemowe
settingsZawiera podstawowe ustawienia systemowe.
statsZawiera statystyki (dane odczytane z czujników)
timersZawiera spis timerów (zdarzeń)
unitsZawiera jednostki miar (używane tylko w UI)
alarmsZawiera spis alarmów
waterZawiera pomiary wody robione poza AaquaPi (np. testami kropelkowymi - używane tylko w UI)

Tabela 5.2. Tabela interfaces

PoleTypNullKluczDomyślnieEkstraOpis
interface_idint(5)NOPRINULLauto_incrementIdentyfikator
interface_addressvarchar(200)YES NULL Adres interfejsu. Dla wejść może zaczynać się od:
  • rpi:1w: - sensory temperatury podłączone do magistrali 1wire na GPIO.

  • rpi:gpio: - pin GPIO

  • rpi:system:txtfile: - dana zostanie odczytana z pliku tekstowego

  • rpi:i2c:miniph: - dane z mostka pomiarowego Miniph

  • dummy: - sensor dummy (wirtualny) przydatny przy rozwoju aplikacji

Dla wyjść może zaczynać się od:
  • rpi:gpio: - pin GPIO

  • rpi:system:txtfile - stan wyjścia zostanie zapisany do pliku tekstowego

  • dummy: - wyjście dummy (wirtualne) przydatne przy rozwoju aplikacji

  • relbrd: - karta przekaźników RelayBoard (wersja USB)

interface_namevarchar(30)NO NULL Nazwa interfejsu. Przykładowe nazwy to "oświetlenie główne", "grzałka", etc.
interface_typetinyint(4)NO 1 Typ interfejsu. Dopuszczalne wartości to:
  • 1 - wejście (np. sensor temperatury)

  • 2 - wyjście (np. port GPIO)

  • 3 - wyjście PWM (wybrane porty GPIO)

interface_iconvarchar(20)YES NULL Ikonka przypisana do urządzenia
interface_conffloatYES NULL Negowanie sygnału wyjściowego. Możliwe ustawienia
  • 0 - standardowe działanie

  • 1 - zanegowanie wyjścia. Dla tego ustawienia "wyłączony" w AquaPi będzie oznaczało "załączony" w rzeczywistości

interface_deletedtinyint(4)NO 0 czy interfejs jest skasowany
interface_htmlcolorvarchar(6)YES 0 Kod HTML koloru który będzie używany na wykresie
interface_uomint(5)YES NULL Id jednostki miary przypisanej do urządzenia

Tabela 5.3. Tabela logs

PoleTypNullKluczDomyślnieEkstraOpis
log_idint(5)NOPRINULLauto_incrementIdentyfikator
log_dateint(5)NO NULL Znacznik czasu
log_levelint(5)NO NULL Typ loga. Możliwe wartości to:
  • 0 - informacja

  • 1 - ostrzeżenie

  • 2 - błąd krytyczny

log_valuechar(200)NO NULL Zawartość loga

Tabela 5.4. Tabela settings

PoleTypNullKluczDomyślnieEkstraOpis
setting_idint(5)NOPRINULLauto_incrementIdentyfikator
setting_keychar(30)NO NULL Nazwa klucza ustawień
setting_valuechar(60)NO NULL Wartość klucza ustawień

Tabela 5.5. Tabela stats

PoleTypNullKluczDomyślnieEkstraOpis
stat_idint(11)NOPRINULLauto_incrementIdentyfikator
stat_dateint(11)YES NULL Znacznik czasu
stat_interfaceidint(5)NOMULNULL Identyfikator interfejsu którego dotyczy zachowana wartość
stat_valuefloatNO NULL Wartość odczytana z interfejsu

Tabela 5.6. Tabela timers

PoleTypNullKluczDomyślnieEkstraOpis
timer_idint(5)NOPRINULLauto_incrementIdentyfikator
timer_timeifint(5)YES NULL Uproszczony znacznik czasu informujący kiedy timer ma być aktywny. W odróżnieniu od zwykłego znacznika, ten zawiera liczbę sekund która upłyneła od północy.
timer_actiontinyint(4)NO NULL Nowa wartość dla interfejsu przełączanego. 0 - wyłacz, 1-włacz
timer_interfaceidthenint(5)NOMULNULL Identyfikator interfejsu który ma być przyłączony jeśli warunki zdarzenia są spełnione
timer_daysvarchar(7)NO NULL Dni tygodnia w kórych timer powinien być sprawdzany. Dni są zapisane jako ciąg zer i jedynek. Od lewej strony zaczynając dni to: niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota.

Tabela 5.7. Tabela units

PoleTypNullKluczDomyślnieEkstraOpis
unit_idint(11)NOPRINULLauto_incrementIdentyfikator
unit_namevarchar(32)NO NULL Jednostka miary



[1] Przechowywanie daty w formacie timestamp polega na zapisaniu liczby sekund od daty 1/01/1970, czyli od momentu początku epoki unixa.