Domoticz, InfluxDB, Grafana

Domoticz cz. 5: Grafana, InfluxDB, Telegraf – łatwe i piękne wykresy

Grafana to odpowiedź na nurtujące nas od lat pytanie – jak prosto szybko i ładnie przedstawić dane z naszych urządzeń. InfluxDB to z kolei baza danych, która jest tak łatwa i prosta w obsłudze, że idealnie nadaje się do naszych zastosowań.
Pokażę Wam jak prosto i szybko przenieść nasze dane z domoticza, oraz innych urządzeń do InfluxDB, a następnie używając Grafany wyświetlić je w taki sposób aby można było z nich dostać znacznie więcej niż z wykresów domoticza – staną się bardzo użyteczne.

Czego będziemy potrzebować?

Software

  • InfluxDB
  • Grafana
  • własne skrypty w bash’u

Hardware

  • Rekomendowane: Raspberry Pi wersja 2 lub 3 (armv7),
  • ALBO: Raspberry Pi A/B/B+ lub Zero (armv6)
  • ALBO: mini komputer z ARM innych producentów (np: OPi PC” rel=”noopener” target=”_blank”>OrangePi na CPU H3/H2/H5) – zwykle są tańsze, Może być to też maszyna x86 z Debianem, ale żadna jednak nie będzie nas kosztować 4-6W jak te oparte o ARMy. W tym przykładzie użyłem najpierw Raspberry Pi 2, ale potem postanowiłem przetestować Orange Pi Pc z ostatnim armbianem.

Instalacja

InfluxDB

Pobieramy z https://www.influxdata.com/downloads/ najnowszą wersję InfluxDB (w chwili pisania 1.0.2) dla „Standalone Linux Binaries (ARM)”:

Następnie tworzymy użytkownika influxdb w systemie

Odpowiadamy twierdząco na pytania, możemy podać dane, hasło lub nie.
Sprawdzamy, czy użytkownik istnieje:

W odpowiedzi powinniśmy otrzymać podobnie jak tutaj:

Teraz instalujemy z pliku binarnego influxdb:

Jeśli wszystko przebiegło pomyślnie możemy uruchomić InfluxDB:

Jeśli baza działa, to możemy skonfigurować, aby uruchamiała się po restarcie systemu; tym razem – zróbmy to inaczej – instalujemy

uruchamiamy i zaznaczamy spacją „*” przy influxdb.

Grafana

Tym razem – trochę prościej, a budowanie jest opcjonalne – korzystamy z pakietów (odpowiednio dla wersji Raspberry Pi 2 i 3 lub A/B/B+, Zero) https://github.com/fg2it/grafana-on-raspberry.
Przykład pakietu dla Raspberry Pi 2 lub 3, wybierz właściwą wersję i pobierz wget’em.

Pakiet podpowiada nam po instalacji aby dodać grafanę do skryptów i uruchamiać przy starcie tak:

Uruchamiamy grafanę:

Konfiguracja

Aktualne wersje InfluxDB zarządzamy poprzez linię komend (CLI):

Aby stworzyć bazę danych wystarczy:

Starsze wersje InfluxDB mają standardowo interfejs po adresem naszego Raspberry Pi, na porcie 8083. Standardowa konfiguracja pozwala od razu na dostęp, bez autoryzacji, przez http. Po połączeniu zobaczymy interfejs:

InfluxDB: Interface
InfluxDB: Interface

a więc – po prostu z menu wybieramy „Create Database”, nasza pierwsza baza będzie nazywała się „domoticz”:

InfluxDB: Creating domoticz database
InfluxDB: Creating domoticz database

To praktycznie… wszystko. Baza jest gotowa – obojętnie czy stworzona przez interfejs http czy przez cli – nie trzeba tworzyć zmienny etc. wystarczy po prostu do niej pisać.

Przesyłanie danych z Domoticza do InfluxDB

W Domoticzu wybieramy z menu „HTTP”:

HTTP push in Domoticz

Wybieramy zmienną, którą chcemy umieścić w bazie – w przykładzie będzie to ciśnienie atmosferyczne:

http-data-pl-1

Jak to się odbywa? Wybieramy zmienną – czyli mierzoną już przez Domoticz dowolną wartość z menu „Nazwa urządzenia”. Następnie nadajemy jej numer – zwykle dla porządku, jest to numer IDX urządzenia w domoticz – w tym przypadku jest to „1450”. Zaznaczamy „Połączenie aktywne”, a po prawej stronie podajemy URL za pomocą którego będziemy pisać do bazy – adres, port – tym razem 8086, bo tam InfluxDB czeka na dane, nazwę bazy jaką stworzyliśmy, użytkownika/hasło (nie używamy tego jeszcze, więc jak rumianek – nie przeszkadza ale i nie pomaga), oraz precyzję danych.
Metoda to HTTP POST, uwierzytelnienie zostawiamy na później.
Najważniejsza część do „Dane:” tutaj podajemy faktycznie zmienną jaką potem będziemy z bazy czytać – oraz jej wartość i czas. Jak się domyślacie zmienna w bazie będzie się nazywa „device_1450” potem będzie jej wartość i czas. Można to sobie podejrzeć tshark’iem, jeśli ktoś jest ciekawy. I to wszystko – dane będą od teraz umieszczne w bazie „domoticz”, nie trzeba tworzyć ich ani nadawać im typów, nowoczesne podejście, prawda?

Przesyłanie danych z dowolnego urządzenia

InfluxDB jest tak przyjazny, że od razu rodzą się pomysły jak wykorzystać go do innych zadań. Skoro rozmawiamy z nim po HTTP, to oznacza, że możemy sami zapisywać w nim dane, lub w prosty sposób te dane tam przenosić. Wystarczy… curl, popularny program obecny w każdej dystrybucji:

Składnia i sposób jest następujący – na przykładzie prostego skryptu:

Przykład pokazuje uproszczoną wersję prostego skryptu, który odczytuje przez SNMP prędkość interfejsu bezprzewodowego do ISP, a więc pokazuje aktualne obciążenie łącza do internetu. curl odpowiada za wysłanie tych danych do bazy „snmp”, zmienną jest inwisp dla ruchu do i outwisp do ruchu od, a dodatkowo przy zmiennej jest parametr host (opcjonalny), celem późniejszego grupowania urządzeń. Następnie jako value – podawana jest prędkość. Nie ma informacji o czasie (zostanie użyty czas wysłania).
Cały skrypt – jeśli ktoś chciałby czytać interfejs rutera wygląda tak (zapewne lepiej użyć telegrafa, ale mam mały sentyment do MRTG i jego sposobu zbierania danych – zatem prezentuję właściwie 17-letni skrypt w bashu). Intencją jest uruchomienie go na screenie, podczas startu systemu – tak samo jak we wpisie o Flightradar i SDR.

Jeśli dane trafiły do bazy, w odpowiedzi z wywołania curl’a powinniśmy otrzymać:

Inną drogą aby sprawdzić czy nasze dane trafiają do bazy – to wywołanie z menu InfluxDB – SHOW MEASUREMENTS:
InfluxDB:

Grafana – wreszcie zapowiedziane wykresy!

Grafana oczekuje na nas na porcie 3000, logujemy się domyślnie admin/admin i przechodzimy z menu w lewym rogu do Data Sources. Wybieramy Add Source i wypełniamy – Type, URL, Access pozostawiamy na proxy, użytkwonik i hasło do bazy:

Grafana: Add Data Source - InfluxDB
Grafana: Add Data Source – InfluxDB

Mamy więc źródło danych, przejdźmy od razu do stworzenia swojego pierwszego „Dahsboard” czyli ekranu z wykresami:

Grafana: Add new Dashboard
Grafana: Add new Dashboard

Następnie dodajemy pierwszy wykres:

Grafana: Panel
Grafana: Panel

Otrzymamy domyślny panel z jedną serią danych do wykreślenie. Wygląda ładnie, ale nie zawiera jeszcze danych z naszej bazy:

Grafana: First Graph
Grafana: First Graph

W kolejnym kroku wybieramy naszą bazę – na dole z Panel data source – zmieniamy z -Grafana- na SNMP. „A” czyli nasza seria danych będzie teraz wyglądać następująco:

Grafana: Add db, toggle edit mode
Grafana: Add db, toggle edit mode

Zielony wykres zniknął, ponieważ musimy wprowadzić odpowiednie dane do wykreślenia. Zaczynamy jak w przykładzie po prawej stronie – przełączamy się w tryb edycji bezpośredniej naszej kwerendy dla typu „A” i wypełniamy tak jak na przykładzie poniżej, następnie wybieramy przy bazie SNMP „+ Data query” i wypełniamy serię „B” – zmiany są aktualizowane na bieżąco:

Grafana: example Internet speed series data entry
Grafana: example Internet speed series data entry

Teraz z menu „Axes” – wybieramy właściwy typ danych – box „Unit”, „data rate” -> „kilobits/sec”. Dla porządku w „General” nazwijmy panel Internet i … gotowe. Ikona dyskietki zapisuje nasz panel do „dashboard’u”:

Grafana: first graph
Grafana: first graph

Następnie polecam zainstalować w grafanie dodatkowe wtyczki – które dają nam dodatkowe typy wykresów, oraz inne dodatki: https://grafana.net/plugins

Telegraf

Ostatni ciekawy program związany z wykresami to Telegraf. Niezwykle rozbudowany program monitorujący aplikacje, interfejsy sieciowe, procesor naszego komputera  – pracuje pod Linuksem. Prosta instalacja łączy się z prostą obsługą.

Po pierwsze – zróbmy sobie dodatkową bazę – „telegrafPI” w InfluxdB, ale z linii komend:

Teraz instalujemy telegraf:

Tym razem możemy dodać źródło pakietów:

do

albo pobrać odpowiedni pakiet ręcznie poprzez

czy wreszcie pobrać

Konfiguracja jest niezwykle prosta – program sam stworzy plik konfiguracyjny, który należy skopiować do

Dobry przykład na początek to CPU:

Zakładając, że jest to ten sam host/komputer na jakim działa influxdB – nie wszystko zadziała od razu – a jeśli nie, to weryfikujemy link w konfiguracji z nazwą/IP hosta z bazą.
W Grafanie, po dodaniu nowego źródła tworzymy taki wykres, z seriami oraz zaznaczamy stacked:

Co da nam taki rezultat, o ile wybierzecie „Stacked” w zakładce Display:

Grafana + Telegraf: CPU Example
Grafana + Telegraf: CPU Example

Własne projekty

Grafana z InfluxDB jest też wykrozystywna w projektach mierzenia SMOGu.

To już koniec, miłego kreślenia pięknych wykresów!