Integracja systemu Grenton z Influx i wizualizacja danych w Grafana

W niniejszej instrukcji zaprezentowana jest integracja systemu Smart Home Grenton z bazą danych Influx w celu zbierania danych oraz aplikacją Grafana do wizualizacji zebranych informacji.

Wymagania

  • CLU Z-Wave 2.0 - nazwane dalej (Name) CLU_ZWAVE_2
  • Moduł Gate Http - nazwany dalej (Name) CLU_GATE_HTTP
  • Serwer z instancją InfluxDB oraz aplikacją Grafana
  • Smart Panel lub inne sensory dostarczające dane

Przygotowanie serwera na Raspberry Pi

  1. Instalacja Rasbian na Rasberry Pi
  2. Instalacja InfluxDB ( polecenia wykonujemy z poziomu linii poleceń ) 3. wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - 2. echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list 3. sudo apt-get update 4. sudo apt-get install influxdb
  3. Konfiguracja InfluxDB jako usługa włączająca się automatycznie
    1. sudo systemctl unmask influxdb
    2. sudo systemctl enable influxdb
    3. sudo systemctl start influxdb ( Uruchomienie serwera InfluxDB)
    4. wpisujemy w CLI influx
    5. następnie tworzymy bazę danych CREATE DATABASE grenton
    6. CLI Influx opuszczamy przez wpisanie polecenia exit
  4. Instalacja Grafana
    1. sudo apt-get install -y adduser libfontconfig1
    2. wget https://dl.grafana.com/oss/release/grafana_7.2.0_armhf.deb
    3. sudo dpkg -i grafana_7.2.0_armhf.deb
  5. Konfiguracja i uruchomienie Grafany
    1. sudo systemctl enable grafana-server
    2. sudo systemctl start grafana-server

Przydatne polecenia przy obsłudze Influx

SHOW DATABASES - pokazuje utworzone bazy danych

USE grenton - wybiera bazę o nazwie grenton do wykorzystania

SHOW MEASUREMENTS - pokazuje jakie pomiary są przechowywane w wybranej bazie danych

SHOW FIELD KEYS - pokazuje jakie pola kluczowe są przechowywane w wybranej bazie danych

SELECT COUNT(*) FROM temp - zlicza wszystkie rekordy z wszystkich pól w pomiarze o nazwie temp

SELECT * FROM temp - wyświetla wszystkie dane dla pomiaru temp

Więcej informacji w oficjalnej dokumentacji

Integracja systemu Grenton

W celu przekazywania danych sensoryczny, zdarzeń z systemu Grenton do bazy danych Influx wykorzystane jest web API W tym celu potrzeba utworzyć obiekty wirtualne HttpRequest Modułu Gate HTTP.

  1. Utwórz obiekt wirtualny HttpRequest. W przykładzie nazwiemy go 'influxDB'.
  2. Skonfiguruj cechy wbudowane następująco:
    1. Host - http://adres_ip_serwera:8086
    2. Path - /write
    3. QueryStringParams - db=nazwa_bazy_danych (w przykładzie grenton)
    4. Method - POST
    5. RequestType - Other
    6. ResponseType - JSON
    7. Reszta cech zostaje z wartościami domyślnymi

 

Obiekt wirtualny HttpRequest dla Influx

Następnie tworzymy skrypt który będzie w bazie InfluxDB - grenton zapisywał odczyty temperatury z czujnika Smart Panelu

local body = "temp,host=SmartPanel value=" .. CLU_ZWAVE_2->PANELSENSTEMP1->Value
local qs = "db=grenton"

CLU_GATE_HTTP->influxDB->SetRequestBody(body)
CLU_GATE_HTTP->influxDB->SetQueryStringParams(qs)
CLU_GATE_HTTP->influxDB->SetMethod("POST")
CLU_GATE_HTTP->influxDB->SendRequest()

 

Przechodzimy do obiektu PANELSENSTEMP1 reprezentującego czujnik temperatury i zdarzeniu OnValueChange . W efekcie każda zmiana temperatury zostanie zapisana w bazie InfluxDB grenton. Należy zwrócić uwagę na cechę wbudowaną Threshold sensorów Smart Panelu. Im mniejsza wartość tym częściej będą zapisywane dane w bazie Influx.

Jeśli chcemy mieć regularne odczyty zapisane w bazie, to należy zastąpić wywoływanie skryptów przez zdarzenie OnValueChange użyciem obiektu wirtualnego Timer, w który konfigurujemy:

  • Cechę wbudowaną Mode ustawiamy na Interval
  • Cechę wbudowaną Time używamy do określenia jak często ma być zapisana. Dla przykładu co 10 000 milisekund

Do zdarzenia OnInit  CLU_GATE_HTTP (Tam gdzie obiekt Timer-a) należy dodać wywołanie metody Start obiektu Timer-a aby co zadany Time baza była aktualizowana.

Uwaga

Należy zwrócić uwagę na częstość zapisów. Raspberry Pi korzysta z karty SD i zbyt częste zapisywanie danych może prowadzić do szybszego zużycia karty.

Jest to przykład bez uwierzytelniania. Jeśli w Grafana włączymy uwierzytelnianie to należy zmodyfikować linijkę w skrypcie

local qs = "db=grenton&u=nazwaUzytkownika&p=haslo"

 

Konfiguracja aplikacji Grafana

Z Grafana łączymy się za pomocą przeglądarki internetowej http://adres_serwera:3000 . Domyślnie logujemy się kontem admin i hasłem admin. Przez pierwszym logowaniu aplikacja wymusi na nas zmianę hasła.

Następnie należy skonfigurować połączenie z bazą danych Influx

Configuration > Data Sources > Add data source

URL: http://localhost:8086 (w przykładzie Grafana jest na tym samym serwerze co InfluxDB)

Database: grenton (nazwa naszej bazy danych)

Http Method: POST

Konfiguracja połączenia Grafany z Influx

 

W kolejnym kroku trzeba utworzyć Dashboard. W menu po lewej stronie, klikamy plusa, utworzy to nowy Dashboard. Następnie dodajemy panel i przechodzimy do jego konfiguracji. Wybieramy bazę Influx i wskazujemy który pomiar nas interesuje (w przykładzie temp).

Grafana oferuje szeroki wachlarz możliwości konfigurowania wykresów.