My guide to grafana / influxdb

From Edgar BV Wiki
Revision as of 08:08, 22 May 2019 by Red (talk | contribs) (→‎Grafana)
Jump to navigation Jump to search

adapted from SmartThings Data Visualisation using InfluxDB and Grafana

Influxdb

apt-get install influxdb influxdb-cli influxdb-client
service influxdb start
systemctl enable influxdb
influx

you can also surf to http://db-01.edgarbv.int:8083/ to check if it works

Back in the cli (influx) enter

Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.0.2
InfluxDB shell version: 1.0.2
> create database "honeywell"
> create user "grafana" with password 'password'

InfluxQL functions

Filling influxdb using evologger For Honeywell Evohome

Evohome client readme Evohome client github Freeranger evologger

apt install git
apt-get install python-pip
cd /opt/
git clone https://github.com/freeranger/evologger.git
get clone https://github.com/watchforstock/evohome-client.git
pip install ./evohome-client
pip install influxdb

now cd /evologger

vi config.ini and fill in the usernames and influxdb stuff (port 8806)

To check if the data is being entered, use the influx cli

use honeywell
> show measurements

name: measurements
------------------
name
zone_temp.actual
zone_temp.delta
zone_temp.target

select * from "zone_temp.actual"

should give you some results.

NB this method takes all the data at the time of polling from the honeywell API instead of incrementally adding to it as Domoticz does.

To get it to run as a service

  vi /opt/evologger.sh
#!/bin/bash

pushd /opt/evologger
./evologger.py
  chmod 744 /opt/evologger.sh
  touch /var/log/evologger
  vi /usr/lib/systemd/system/evologger.service
[Unit]
After=grafana.service

[Service]
ExecStart=/opt/evologger/evologger.sh >& /var/log/evologger

[Install]
WantedBy=default.target
  systemctl enable evologger
  systemctl start evologger
  vi /etc/logrotate.d/evologger
/var/log/evologger {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
}

Filling influxdb using domoticz

For Honeywell Evohome

Under Setup -> More Options -> InfluxDB

Under Edit Link select the Device Name, value (Status / Temperature / Set Point), target type (direct: it sends everything it knows periodically / On value change: only when the value changes it will be sent)

Note for target type: for Set Point and Status you will need to set direct, to populate the database with the first data points. Once influxdb has been populated, you can change it to on value change) and click Add. It will appear in the table above.

Under general settings fill in database name and port 8086 :)

Under database in the format: honeywell-domoticz&u=USERNAME&p=PASSWORD

Also fill in username and password

Turn on Debug to test if data is being sent. You can find the log in Setup -> log. It will show entries like

  InfluxLink: value Temperature,idx=1,name=Huisje:-Living-room value=21.0

Save.

Now let it run for a (long) while. Then you can use the influx cli to

> show measurements
name: measurements
------------------
name
Set-point
Status
Temperature

>select * from "Set-point"

Grafana

The Grafana download page debian installation page for grafana Configuration page for grafana

apt-get install libfontconfig1 apt-transport-https

vi /etc/apt/sources.list

deb https://packages.grafana.com/oss/deb stable main

now you can install

dselect update
apt-get install grafana
systemctl daemon-reload
systemctl enable grafana-server
mv /var/lib/grafana/ /home/
ln -s /home/grafana /var/lib/grafana
systemctl start grafana-server

Verify it works by visiting

http://monitor.edgarbv.int:3000

admin / admin

change password

vi /etc/grafana/grafana.ini

;allow_sign_up = false

Now you can add a data source, which is an influxdb, with name set to Honeywell, URL set to http://db-01.edgarbv.int:8086/ and Influxdb database name, user and password filled in. You can then save and test.

NOTE the URL for data access is port 8086!

Getting started with Grafana guide

If you want to mass search and replace something you can copy the whole JSON model to an editor, change it and paste it back in the Dashboard Settings

https://play.grafana.org has loads of example dashboards to explore and copy

Variables

To simplify your life you can get the keys from influxdb and use them as variables. You can then use them for repeating graphs or to put all the variables into a single graph. In order to do that in the dashboard settings you can create a new variable. Set the name to Room, type to Query. Choose the datasource and put in the query. For the honeywell evo the query is

  show tag values with key = "zone"

which will give you all the rooms / zones. Under selection options, you turn on multi-value and include all option.

To use the variables, when you create a new panel, don't choose to add a visualisation, but choose to Add Query.

To show all the zones in a single graph

By clicking next to the rooms, you can then select which rooms you want to see.

Query considerations

Grafana and Influxdb

(Honeywell Evohome) Because you are using Temperatures and you don't want an average temp but the real temp shown, in the SELECT part of the query, change from mean() to last() (which is under selectors).

Because our time is not regular updates, we keep GROUP_BY at time($__interval)

In order to fill up where lines don't meet, in GROUP BY fill(previous). If you don't do this with a gauge and you are using a fixed time interval

If you want to change the name of the line in the legend, fill in ALIAS BY with the label you want to use

To show a specified time range on the dashboard (eg you are looking for a page with graphs that immediately shows the last day, week and month) you fill in all the way below the queries the Relative Time box with 1d, 7d, 4w, etc.