Domoticz, InfluxDB, Grafana

Domoticz part 5: Grafana, InfluxDB, Telegraf – beautiful and easy graphs

Grafana is the answer to the nagging question we’be been asking ourselves over the years – how to quickly and nicely present our data gathered from devices. InfluxDB on the other hand is the database that is as easy and simple to use, thus making it an ideal candidate for this job.
Let me show you how to quickly and easily put our data from domoticz and other devices to InfluxDB and then using Grafana – display in much more useful way than default domoticz graphs do.

What will we need?

Software

  • InfluxDB
  • Grafana
  • bash scripts

Hardware

  • Raspberry Pi – v2 or v3 (armv7)
  • OPTION: Raspberry Pi A/B/B+ lub Zero (armv6)
  • OPTION: A different ARM based micro-computer (i.e.: OrangePi using CPU H3/H2/H5) – they could be cheaper. It’s also entirely possible to use x86 computer with Debianem, but it’s going to eat way more than 4-6W when using ARM based. Here I used finally Orange Pi PC with latest armbian distribution, tested first on latest Raspberry Pi 2

Intallation

InfluxDB

Let’s download https://www.influxdata.com/downloads/ latest InfluxDB version (at the time of writting it was 1.0.2) – “Standalone Linux Binaries (ARM)”:

Then we have to create user influxdb:

Accept the questions with yes, add some data if you like, password.
Check if the user exists:

We should get similar, positive response:

Now, let’s install from influxdb binary:

All went well? Let’s start our InfluxDB:

It works! Let’s make sure it starts with the system, this time using a different tool:

Run it, push space to get “*” at influxdb.

Grafana

This time it’s a bit easier let’s use the ready package from https://github.com/fg2it/grafana-on-raspberry/. Choose a package either for Raspberry Pi 2/3 (armv7) or for Raspberry Pi A/B/B+ lub Zero (armv6), and download it using wget. Here I’m using Raspberry Pi 2/3 package:

This package tells us to add Grafana to start with the system in this way:

Let’s start grafana:

Configuration

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

Aby stworzyć bazę danych wystarczy:

Current InfluxDB ara managed by (CLI):

Creata database:

The older version of InfluxDB by default use the web interface – by using IP of our Raspberry at port 8083. Basic configuration allows unauthorized access via http. This is the interface:

InfluxDB: Interface
InfluxDB: Interface

so, let’s just choose “Create Database”, and name our first database “domoticz”:

InfluxDB: Creating domoticz database
InfluxDB: Creating domoticz database

That is it! Either with http interface or CLI – no need to create data, tables – we can simply add data to it.

Sending from domoticz to InfluxDB

Using Domoticz – use the menu and select “HTTP”:

HTTP push in Domoticz

We need to find data that is interesting and put it into Influxdb – so let’s choose atmospheric pressure:

http-data-pl-1

So how does this work? First, we choose a variable – our data, that is already in Domoticz system – from menu “Device name”. Then – we need a number to identify – I use the same as the IDX number of the device in domoticz – so here it’s “1450”. Tick the “Activate connection”, at the right side and provide URL that will be our connection via http to write toInfluxdb: IP, port – this time it’s 8086, database name, username/password if used and precision.
Method is HTTP POST, authorization – let’s leave that for later.
The most important part is the “Data:” here we enter our InfluxDB variable, that we going to use later to create graphs, it’s value and time. Keeping things small and simple, we shall call it “device_1450”. Use tsharkie, if you’re curious how the URL’s work, what is the response (HTTP code 204 if it’s fine). That is it – data will be stored in “domoticz”, database, no need to create types, indexes, tables – quite new approach, eh?

Sending data from any device (not domoticz)

Since InfluxDB is so easy going, everybody is getting ideas. We talk via HTTP, meaning that we can put the data using simple tools i.e. using curl, a popular program present in each modern distribution.:

Here’s and example on how to use it:

This very simple example uses SNMP (the old 32-bit counters) that queries the wireless interface to ISP, to show the “Internet speed”. curl is used here to send the data to database named “snmp”, the valiable is inwisp for Input and outwisp for Output, but to spice up things a bit – we use host (it’s optional), to be able to later group the devices. Then the value – which is the speed. We don’t put extra time value – we use the current system time.
The whole script – below (it’s much easier to use telegraf, but I still love the MRTG’s approach to collect data) is an 17 yeras old 17 bash script!. I used it via screen while starting the system same way as with the – Flightradar and SDR blog entry.

The stored data in snmp database should give you the following reply:

The other way to find out if we’re in the database is to use the Influxdb HTTP interface and issue from the menu – SHOW MEASUREMENTS:
InfluxDB:

Grafana – finally we’re getting to the beautiful graphs!

Grafana runs on port 3000, login and password admin/admin – now choose in left top corner – Data Sources. Add Source and type in – Type, URL, Access at proxy, user and password for the database:

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

If the data source is working – we can go to “Dashboard” and create our first :

Grafana: Add new Dashboard
Grafana: Add new Dashboard

Next – let’s add our first graph:

Grafana: Panel
Grafana: Panel

Now we see the default panel with single data series to plot/graph. It looks nice, but this is not our data yet:

Grafana: First Graph
Grafana: First Graph

Next step – select our database from the “Panel data source” – change from -Grafana- to SNMP. “A” – our data series should look like this:

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

Green line is gone, because we need to provide correct data – we do it in the same way – changing to the edit mode in the query “A” and fill in just like in exemple below. Next choose again SNMP “+ Data query” and fill in the “B” query – all changes are updated on the fly:

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

Go to “Axes” menu – here, select proper data type – “Unit”, “data rate” -> “kilobits/sec”. In the “General” name the Panel “Internet” and this is it. The floppy disc icon saves our new dashboard:

Grafana: first graph
Grafana: first graph

It’s time now to install aditional grafana puligns to get more of the graphs, gauges etc: https://grafana.net/plugins

Telegraf

The last interesting piece of software is Telegraf. This a very feature-rich piece of monitoring software, that is able to gather data from aplication statues, interfaces, CPU, and runs also on Linux> Simple installation follows simple configuration.
First – create new databes in InfluxDB – “telegrafPI” but this time using command line:

Now let’s install telegraf:
We can either add repository:

to

or get appropriate pacakge from:

or even use

Configuration is dead simple telegraf pre-configures the file based on what we tell it to, then we should save it in:

So to get you started lets monitor CPU:

Based that this is the same computer we monitor where influxdB is isntalled – of not – choose proper IP of the DB host.
In Grafana – after adding new database source, we’re using the following data series for plotting:

To get the result below, tick the “Stacked” in Display tab:

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

And this is it, go and create beautiful graphs!




  • huczas

    Długo czekałem na ten wpis 🙂 przy chwili wolnego zabiorę się za to u siebie 🙂 Na tą chwilę mam w planie odpalenie backupu rsync do NASa – nie używałem więc dużo czytania przede mną 🙂

    • Łukasz C. Jokiel

      Hmmm… u mnie paczka daje /etc/init.d/telegraf a ten produkuje taki proces:

      /usr/bin/telegraf -pidfile /var/run/telegraf/telegraf.pid -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d

      • huczas

        pi@raspberrypi:~ $ sudo /etc/init.d/telegraf start
        sudo: /etc/init.d/telegraf: command not found

        • Łukasz C. Jokiel

          Może już tylko do systemd daje paczka “skrypt”?

          service –status-all ?

          • huczas

            pi@raspberrypi:~ $ service –status-all
            [ – ] PiGateway
            [ + ] PiGatewaySerial
            [ – ] alsa-utils
            [ + ] avahi-daemon
            [ + ] bluetooth
            [ – ] bootlogs
            [ – ] bootmisc.sh
            [ – ] checkfs.sh
            [ – ] checkroot-bootclean.sh
            [ – ] checkroot.sh
            [ – ] console-setup
            [ + ] cron
            [ + ] dbus
            [ + ] dhcpcd
            [ + ] domoticz.sh
            [ + ] dphys-swapfile
            [ + ] fake-hwclock
            [ – ] grafana-server
            [ + ] hdparm
            [ – ] hostname.sh
            [ – ] hwclock.sh
            [ – ] influxdb
            [ – ] kbd
            [ + ] keyboard-setup
            [ – ] killprocs
            [ + ] kmod
            [ – ] lightdm
            [ – ] motd
            [ – ] mountall-bootclean.sh
            [ – ] mountall.sh
            [ – ] mountdevsubfs.sh
            [ – ] mountkernfs.sh
            [ – ] mountnfs-bootclean.sh
            [ – ] mountnfs.sh
            [ + ] networking
            [ – ] nfs-common
            [ + ] ntp
            [ – ] plymouth
            [ – ] plymouth-log
            [ + ] procps
            [ – ] raspi-config
            [ + ] rc.local
            [ – ] rmnologin
            [ – ] rpcbind
            [ – ] rsync
            [ + ] rsyslog
            [ – ] sendsigs
            [ + ] ssh
            [ – ] sudo
            [ + ] triggerhappy
            [ + ] udev
            [ + ] udev-finish
            [ – ] umountfs
            [ – ] umountnfs.sh
            [ – ] umountroot
            [ + ] urandom
            [ – ] x11-common
            [ – ] xrdp
            ani śladu po telegrafie, z którego sposobu instalacji korzystałeś?

          • Łukasz C. Jokiel
          • huczas

            ok, więc wersja 1.0.1 telegrafu daje faktycznie skrypt który uruchamia po restarcie, czemu nowszy tego nie ma, nie wiem 🙁 Jeśli chodzi o automatyczne uruchamianie influxa – musiałem dopisać do rc.local przed exit 0, sudo /etc/init.d/influxdb start i dopiero po tym mi startuje, niby rc.local na roocie startuje ale bez sudo się nie odpala influx z jakiegoś powodu.

  • huczas

    przerobiłem, poszło wszystko zgodnie z tym co pisałeś poza częścią Telelegraf, mianowicie – zainstalowałem sposobem z paczką deb – wydaje mi się że to najprostsza bo najbardziej zbliżona do apt-geta.
    Samo wpisanie telegraf coś tam odpaliło, po czym wyłączyłem ctrl+c, w influx stworzył mi swoją bazę telegraf, telegrafPI pusta została… (czy on już teraz będzie sam uruchomiony nawet po restarcie?) Do tego tam gdzie wklejałeś kod znaki zamieniło na > i <
    Więcej niejasności chyba nie mam 🙂

    • Łukasz C. Jokiel

      O, dzięki poprawione. telegraf startował domyślnie po instalacji, ale sprawdź go jeszcze.

      • huczas

        zrobiłem restart przy okazji przenoszenia się poza kartę sd, po restarcie nie startuje samo nic, tj, influx się uruchomił ale na swoim panelu pokazywał brak połączenia do bazy danych, sudo /etc/init.d/influxdb start – załatwiło sprawę więc dodałem ten wpis na końcu pliku .bashrc (roota, bez sudo z przodu). Jeśli chodzi o telegraf – też nie uruchamia się sam, nie wiem za bardzo jak/gdzie go dodać aby się sam uruchamiał, polecenie telegraf uruchamia go ale ctrl+c zamyka i nie bardzo wiem co dalej 🙂

  • moskit81

    Witam
    Jak mierzysz moc rekuperatora itd? Na wykresach widać pomiar mocy.
    Pozdro

    • Łukasz C. Jokiel

      Przez z-wave – Domoticz na RPi ma dongle Aeon Z-Stick Gen2 a rekuperator podłączony przez Neo Cool – wtyczka, która podaje V, A i W. Muszę to w końcu opisać…

      • moskit81

        Troche drogie rozwiązanie:( nie szukałeś czegoś tańszego od z-wave i inode https://inode.pl/iNode-Energy-Meter,p,27 .
        Szukam pomiaru mocy 1 i 3 faz z domoticzem ale czegoś tańszego.

        • Łukasz C. Jokiel

          Ależ, czy $20 to drogo? To mierzy napięcie i natężenie, a nie zlicza impulsy z licznika (do którego nie każdy ma dostęp zresztą…) – taki licznik na ESPEasy to jakieś $8, więc nie 89PLN+przesyłka – to jest drogo.

          Do pomiaru 1 albo 3 faz potrzebujesz już cęgowych.

          • moskit81

            Chodzi mi o łączny koszt bo jeszcze chyba potrzebny dongl usb w pi? Szukałem na pl z-wave to drogie to 🙂 Ja chce mierzyć tak jak Ty moc na rekuperatorze i drugi pomiar moc na pompie ciepła 3 fazy i szukam rozwiązań po necie zeby to wrzucić w domoticza. Sonoff do rekuperacji https://www.itead.cc/smart-home/sonoff-pow.html tylko chyba domoticz tego nie rozpozna

          • Łukasz C. Jokiel

            Tak, z-wave jest drogie ale (ale działa):
            – używany sprzęt to jest to 🙂 – szukaj używek
            – niezastąpione w sterowaniu termostatami (Danfoss)
            – główny na 3-fazy/1-faza – jest z-wave i jest drogi. No ale działa.
            – na rekuperatorze nie zmierzysz impulsowym tylko właśnie takim za $20, dodatkowo masz on/off
            – sonoff’a można zintegorować, ale jeszcze lepiej – wystarczy przeflaszować go ESPEasy i już masz gotowe urządzenie pod Domoticz – tylko kłopot, że nie zachowuje stanów

          • moskit81

            Pod rekuperator to wiem że nie impulsowy tylko do tego za 20$ jest jeszcze potrzebny dongl na usb za 200zł dobrze rozumiem?
            Impulsowy myślałem o założeniu na licznik który mam osobny do pompy ciepła 3 fazy, chce mieć monitorowaną moc w czasie jaką pobiera pompa a nie tylko odczyt z cyfrowego licznika.
            Sonoffa jak przeflaszuje ESPEasy to wtedy nie będę miał funkcji on/off dobrze rozumiem?

          • Łukasz C. Jokiel

            Tak, aby zacząć z z-wave potrzebujesz Z-Stick S2 nowy około 199PLN.
            Jak przeflaszujesz to będziesz miał – ESPEasy ma sterowanie przekaźnikiem (można przez skrypt podłączony do virtualnego przełącznika).
            Tyle że przewaga z-wave to inforamcja zwrotna, że zostało przełączone a przy Sonffie to nie wiem do końca…

          • moskit81

            Gdzie kupowałeś Neo Cool za 20$. U chinczyków widze za 35$ tyle samo u nas.

          • Łukasz C. Jokiel

            Well – 11.11 – zapowiadali promocje + 20% cashback w PlanetPlus. Potem widziałem dyskusję, że nie utrzymają takiej promocji. Kupowałem po to aby przetestować jakość. Na razie jest nieźle, ale dużego prądu nie przepuszczam.

          • moskit81

            Jaki ma zasięg Z-Stick S2 ? nie trzeba do tego jakiejś anteny, przez ściany strop bez problemu łapie?
            Może lepsze rozwiązanie RFLink na 868MHz i antena? Mam rflinka 433 i się sprawdza.

          • Łukasz C. Jokiel

            868MHz – w budynku nawet przez dwa betonowe stropy, poza – 15 metrów dalej. Natomiast urządzenia (należy sprawdzić w specu) przekazują sygnał dalej (są repeaterami), więc problemu z zasięgiem – nie zaobserwowałem.

  • huczas

    Jak bezboleśnie podnieść wersję grafany? instalowałeś 3.1.1 a jest przygotowana już 4.1.1 https://github.com/fg2it/grafana-on-raspberry oraz influx 1.2.0?

    • Łukasz C. Jokiel

      Mam ‘devel-pi’ – zakutalizowałem do 4.0.1beta (influxdb nie ruszam, po prostu przepisałem źródła w Grafanie-devel-pi) na źródłowy IP influksa – poszło bez problemu. Możesz w razie czego zapisać ekrany – ważne jest aby zmienne z bazy się nie zmieniały.

      • huczas

        ok, jakieś wskazówki jak to zrobić? instalowałem grafane jak wyżej pokazywałeś 🙂

        • Łukasz C. Jokiel

          Pobrać, dpkg -i “plik”.deb i powinno po prostu zadziałać 🙂 Jak nie to usunąć i z poprzedniej paczki – oryginalnej.

          • huczas

            ok, więc aktualizacja na rpi3:

            wget https://bintray.com/fg2it/deb/download_file?file_path=main%2Fg%2Fgrafana_4.1.1-1484347088_armhf.deb
            sudo dpkg -i download_file?file_path=main%2Fg%2Fgrafana_4.1.1-1484347088_armhf.deb
            sudo /bin/systemctl restart grafana-server

            działa 🙂

      • huczas

        influxdb nie upgradujesz? usunie baze danych przy podnoszeniu wersji?

  • huczas

    Dla poprawienia: Tym razem możemy dodać źródło pakietów:
    deb https://repos.influxdata.com/debian jessie stable
    do
    /etc/apt/sources.list

    Do tego trzeba jeszcze doinstalować: sudo apt-get install apt-transport-https (pakiet pozwala na https w sources.list)
    następnie trzeba dodać klucz GPG bo przy próbie update wywali jego brak:
    sudo apt-get update
    […]
    Get:13 https://repos.influxdata.com jessie/stable Translation-en [334 B]
    Get:14 https://repos.influxdata.com jessie/stable Translation-en_GB [337 B]
    Ign https://repos.influxdata.com jessie/stable Translation-en_GB
    Get:15 https://repos.influxdata.com jessie/stable Translation-en [334 B]
    Ign https://repos.influxdata.com jessie/stable Translation-en
    Fetched 5,424 B in 13s (402 B/s)
    Reading package lists… Done
    GPG error: https://repos.influxdata.com jessie InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 684A14CF2582E0C5

    sudo apt-key adv –keyserver ha.pool.sks-keyservers.net –recv-keys 684A14CF2582E0C5
    […]
    gpg: requesting key 2582E0C5 from hkp server ha.pool.sks-keyservers.net
    gpg: key 2582E0C5: public key “InfluxDB Packaging Service ” imported
    gpg: Total number processed: 1
    gpg: imported: 1 (RSA: 1)

    Od tej pory można normalnie instalować sudo apt-get install telegraf, a przy apt-get update/upgrade telefraf będzie brany pod uwagę jeśli pojawi się nowsza wersja 🙂

    • huczas

      Znalazłem jeszcze opcję dla grafany, po tym wyżej można też dodać sobie grafanę w ten sposób (niesie ten plus że zwykłym apt-get update/upgrade aktualizujemy sobie również grafanę 🙂

      Dla RPi1 używamy tych poleceń:

      echo “deb https://dl.bintray.com/fg2it/deb-rpi-1b jessie main” | sudo tee -a /etc/apt/sources.list.d/grafana.list
      (To repo zadziała też na nowszym RPi2 i 3 ale binarki mogą być działać wolniej)

      Dla RPi2 i 3 używamy tego:

      echo “deb https://dl.bintray.com/fg2it/deb jessie main” | sudo tee -a /etc/apt/sources.list.d/grafana.list
      zmieniamy jessie na wheezy jeśli działamy na starszej wersji systemu
      zmieniamy main na testing jeśli interesują nas wersje beta

      sudo apt-get update
      sudo apt-get install grafana
      Możemy też sprawdzić sobie dostępne wersje sudo apt-cache madison grafana

      Disquos przycina linki więc wersja angielska jest tu: https://github.com/fg2it/grafana-on-raspberry/wiki#with-apt-from-bintray-debian-repository

      • Łukasz C. Jokiel

        Niezłe, spojrzę w wolnej chwili! Właśnie migruję grafanę i Influxdb 🙂

        • huczas

          do czego/gdzie migrujesz?

          • Łukasz C. Jokiel

            Docelowe Orange Pi, uruchamiane z SATA. 8 miesięcy influxdb pisze po karcie SD, czas to przenieść na ‘produkcję’ 😀

          • huczas

            ja mam rpi3 uruchamiane z hdd(usb2 -działa wolniej niż na sd ale nie przeszkadza w zbieraniu danych i pokazywaniu tego na www) w sumie tak docelowo już lata. zanim 500gb mi się zapełni logami to można powiedzieć że nic nie muszę z tym robić już 🙂
            Z jakiegoś powodu zaliczył mi system pada, objawiło się to tak że serwisy www nie odpowiadały, nie pobrał sobie adresu ip, narazie odpaliłem watchdoga z pilngowaniem swojego adresu -jak go zgubi to się powinien zrestartować teoretycznie

          • Łukasz C. Jokiel

            To jest dobry kierunek – u mnie jak coś mi się destabilizuje to odpalam następne Orange Pi. Takie przeciwieństwo wirtualizacji…

  • Michal Szymanski

    Dzisiaj przetestowałem i udało się zainstalować najnowaszą wersje InfluxDB (1.2.0) i Grafana (4.1.1) zgodnie z opisanymi krokami.
    Oczywiście zmieniłem nazwy pakietów.
    Co musiałem dodatkowo zmienić to zamiast “cp -R * /” zrobić “sudo cp -R * /”.

  • Robert Pelczarski

    Witam
    Dzięki za tutorial, wszystko śmiga pięknie.
    Nie mogę sobie tylko poradzić z wysłaniem zużycia energii z Domoticza, mam to na jednym Node z MySensors
    Wysyłany jest stan licznika energi [kWh] natomiast nie potrafię wysłać do IndluxDb aktualne używanej Moc [W].
    Da się to jakoś zrobić?

    dzięki.
    Robert

    • Łukasz C. Jokiel

      Dzięki, nie używam mysensors – ale w bazie InfluxDB – zapisujesz wartości liczbowe, bez jednostek. Dopiero w Grafanie wybierasz ich reprezentację na wykresie. Zapisujesz po prostu liczbę 220 – potem wyświetlasz ją w Watt.

      • Robert Pelczarski

        tak, to wiem
        Chodzi o to, że Domoticz dla kontrolki mocy pod jednym ID posiada więcej niż dwie wartości [kWh] i [W] i inne, które widać w json np. http://ip:8080/json.htm?type=devices&rid=MyID, zwraca dwie wartości Data i Usage, korzystając z interfejsu Domoticza HttpLink mogę wybrać tylko “Nazwę sensora” a wysyła mi tylko “Data” i nie wiem jak wysłać “Usage” a tam jest bieżące zużycie. Wiem że mogę to wysłać w skryptach przez curl, ale wolałbym bardziej “legalnie” z interfejsu jeśli to możliwe

        • Łukasz C. Jokiel

          OK, masz dwie drogi – gdy np: aktualizuję z czujnika BME280 podłączonego do Domoticza – to podczas podwania mogę wybrać zeń Temperaturę – zwykle ten sam ID oraz Wilgotność – daje inny ID i wreszcie Ciśnienie.
          Jeśli tego nie masz to spróbuj pobrać zmienną BEZ domoticza i wysłać ją curlem. Przykłady jak to zrobić masz w skrypcie o prędkości, oraz o smogu: https://goo.gl/YrzoDY

          • Robert Pelczarski

            dzięki, poszło przez curl

  • Robert Pelczarski

    Witam
    Dzięki a tutorial, wszystko śmiga pięknie.
    Nie mogę sobie tylko poradzić z wysłaniem zużycia energii z Domoticza, mam to na jednym Node z MySensors
    Wysyłany jest stan licznika energi [kWh] natomiast nie potrafię wysłać do IndluxDb aktualne używanej Moc [W].
    Da się to jakoś zrobić?

    dzięki.
    Robert