A more or less standard software stack used for control, processing and displaying data, has emerged that is almost used by everyone when hacking around on Arduinos, ESP8266, Raspeberry Pi’s and other plethora of devices. This “standard” software stack basically always includes the MQTT protocol, some sort of Web based services, Node-Red and several different cloud based services like Thingspeak, PubNub and so on. For displaying data locally, solutions like Freeboard and Node-Red UI are a great resources, but they only shows current data/status, and has no easy way to see historical data.
So on this post I’ll document a software stack based on Node-Red, InfluxDB and Graphana that I use to store and display data from sensors that I have around while keeping and be able to display historical memory of data. The key asset here is the specialized time-series database InfluxDB that keeps data stored and allows fast retrieval based on time-stamps: 5 minutes ago, the last 7 days, and so on. InfluxDB is not the only Time-Series database that is available, but it integrates directly with Grafana the software that allows the building of dashboards based on stored data.
I’m running an older version of InfluxDB on my ARM based Odroid server, since a long time ago, ARM based builds of InfluxDB and Grafana where not available. This is now not the case, but InfluxDB and Grafana have ARM based builds so we can use them on Raspberry PI and Odroid ARM based boards.
So let’s start:
Setting up Node-Red with InfluxDB
I’ll not detail the Node-Red installation itself since it is already documented thoroughly everywhere. To install the supporting nodes for InfluxDB we need to install the package node-red-contrib-influxdb
cd ~/.node-red npm install node-red-contrib-influxdb
We should now restart Node-red to assume/detect the new nodes.
We can go to the InfluxDB downloads page and follow the installation instructions for our platform. In my case I need the ARM build to be used on Odroid.
cd ~ wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.0_linux_armhf.tar.gz tar xvzf influxdb-1.2.0_linux_armhf.tar.gz
The InfluxDB engine is now decompressed in the newly created directory influxdb-1.2.0-1. Inside this directory there are the directories that should be copied to the system directories /etc, /usr and /var:
sudo -s cd /home/odroid/influxdb-1.2.0-1
Copy the files to the right location. I’ve added the -i switch just to make sure that I don’t overwrite nothing.
root@odroid:~/influxdb-1.2.0-1# cp -ir etc/ /etc root@odroid:~/influxdb-1.2.0-1# cp -ir usr/* /usr root@odroid:~/influxdb-1.2.0-1# cp -ir var/* /var
We need now to create the influxdb user and group:
root@odroid:~/influxdb-1.2.0-1# groupadd influxdb root@odroid:~/influxdb-1.2.0-1# useradd -M -s /bin/false -d /var/lib/influxdb -G influxdb influxdb
We need now to change permissions on /var/lib/influxdb:
cd /var/lib chown influxdb:influxdb influxdb
We can now set up the automatic start up script. On the directory /usr/lib/influxdb/scripts there are scripts for the systemctl based Linux versions and init.d based versions that is my case. So all I have to do is to copy the init.sh script from that directory to the /etc/init.d and link it to my run level:
root@odroid:~# cd /etc/init.d root@odroid:/etc/init.d# cp /usr/lib/influxdb/scripts/init.sh influxdb root@odroid:/etc/init.d# runlevel N 2 root@odroid:/etc/init.d# cd /etc/rc2.d root@odroid:/etc/init.d# ln -s /etc/init.d/influxdb S90influxdb
And that’s it. We can now start the database with the command /etc/init.d/influxdb start
root@odroid:~# /etc/init.d/influxdb start Starting influxdb... influxdb process was started [ OK ]
We can see the influxdb logs at /var/log/influxdb and start using it through the command line client influx:
root@odroid:~# influx Connected to http://localhost:8086 version 1.2.0 InfluxDB shell version: 1.2.0 > show databases name: databases name ---- _internal >
We need now to download Grafana. In my case for Odroid since it is an ARMv7 based processor, no release/binary is available.
But a ARM builds are available on this GitHub Repository: https://github.com/fg2it/grafana-on-raspberry for both the Raspberry Pi and other ARM based computer boards, but only for Debian/Ubuntu based OS’s. Just click on download button on the description for the ARMv7 based build and at the end of the next page a download link should be available:
odroid@odroid:~$ wget https://bintray.com/fg2it/deb/download_file?file_path=main%2Fg%2Fgrafana_4.1.2-1487023783_armhf.deb -O grafana.deb
root@odroid:~# dpkg -i grafana.deb Selecting previously unselected package grafana. (Reading database ... 164576 files and directories currently installed.) Preparing to unpack grafana.deb ... Unpacking grafana (4.1.2-1487023783) ... Setting up grafana (4.1.2-1487023783) ... Installing new version of config file /etc/default/grafana-server ... Installing new version of config file /etc/grafana/grafana.ini ... Installing new version of config file /etc/grafana/ldap.toml ... Installing new version of config file /etc/init.d/grafana-server ... Installing new version of config file /usr/lib/systemd/system/grafana-server.service ...
Set the automatic startup at boot:
root@odroid:~# ln -s /etc/init.d/grafana-server /etc/rc2.d/S91grafana-server
And we can now start the server:
root@odroid:~# /etc/init.d/grafana-server start * Starting Grafana Server [ OK ] root@odroid:~#
We can now access the server at the address: http://server:3000/ where server is the IP or DNS name of our ODroid or RPi.
This ends the installation part for the base software.
The following steps are:
- Create the Influx databases
- Receive data from sensors/devices and store it on the previously created database
- Configure and create Grafana data sources and dashboards
- Add some plugins to Grafana