Dieser Artikel gilt speziell für den Raspberry Pi, sollte aber weitgehend auch auf normalen Rechnern tun.
Stichwort Sicherheit: Alle beteiligten Komponenten lassen sich durch Passwörter, Zertifikate und Verschlüsselung sicher betreiben, aus pädagogischen Gründen wird darauf weitgehend verzichtet.
Kurswechsel, Ziel ist Grafana für die Visualisierung der Kurven und dafür gibt es in der neuesten Version lediglich ein rudimentäres Modul für MySQL, aber für InfluxDB ein Gutes.
Der Versuch MySQL in die schöne neue IoT-Welt rüberzuretten ist aus meiner Sicht erstmal gescheitert, das hat mehrere Gründe.
InfluxDB ist speziell für „time series“ entwickelt, genau diese lädt die riesige Sensorenwolke wie blöd auf den MQTT-Brokern ab.
ESP8266 (mit DHT11/22-Sensor) => MQTT => Node-Red => InfluxDB => Grafana
ESP8266 und MQTT (falls den Broker hier jemand sucht, der „Mosquitto“ läuft auf einem Banana-Pi nebenan (apt install mosquitto), bleiben Node-Red, InfluxDB und Grafana
„Neue“ Anwendungen im IoT-Bereich entwickeln sich sehr schnell weiter, hierbei kommt Debian mit seinem recht konservativen Ansatz im Repository an seine Grenzen, wir nutzen „Fremdpakete“.
Probleme bei Stretch für den Rasperry Pi
- Node-Red: veraltet und es fehlt der wichtige „Manage palette“-Button um Nodes nachzuinstallieren, zumindest hab ich sie nicht gefunden
- Grafana aus dem Stretch-Repository ist ebenfalls episch veraltet und es tut auch nicht, beim Anmelden auf http://10.0.0.244:3000 passiert…Nichts!
- der ganze Node.js-Kram als Unterbau für Node-Red ist auch veraltet
InfluxDB trauen wir mal: apt install influxdb influxdb-client Zu Unrecht vertraut, tut auch nicht richtig.
Installation von InfluxDB siehe hier, „jessie“ durch „stretch“ ersetzen:
https://gist.github.com/boseji/bb71910d43283a1b84ab200bcce43c26
Node-Red: Alles lesen: https://nodered.org/docs/hardware/raspberrypi
oder einfach folgenden Befehlt auf der Kommandozeile als root eingeben
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
Danach für automatischen Start:
systemctl enable nodered.service
Grafana für den Pi holen wir uns von hier:
https://bintray.com/fg2it/deb/grafana-on-raspberry/_latestVersion
Installation: dpkg -i grafana_xyz.deb
danach: apt -f install falls Abhängigkeiten aufgelöst werden müssen.
Für Start und Autostart:
/bin/systemctl daemon-reload
/bin/systemctl enable grafana-server
Danach laufen einige Dienste auf dem Server, festzustellen über externen Portscan oder besser über ein „netstat -tulpn“ auf dem Server.
(nmap scannt übrigens per default Port 1880 von Node-Red nicht)
root@deinemudda:~# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 417/sshd
tcp 0 0 0.0.0.0:1880 0.0.0.0:* LISTEN 365/node-red
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 390/mosquitto
tcp6 0 0 :::8083 :::* LISTEN 413/influxd
tcp6 0 0 :::8086 :::* LISTEN 413/influxd
tcp6 0 0 :::22 :::* LISTEN 417/sshd
tcp6 0 0 :::8088 :::* LISTEN 413/influxd
tcp6 0 0 :::1883 :::* LISTEN 390/mosquitto
InfluxDB kann per Kommandozeile influx verwaltet werden, hier gibt’s hier Infos:
https://docs.influxdata.com/influxdb/v1.2/introduction/getting_started/
root@deinemudda:~# influx
Connected to http://localhost:8086 version 1.3.5
InfluxDB shell version: 1.3.5
> create database temperatur
> create database luftfeuchte
Influx-Magie:
show shards => Zeigt den Scherbenhaufen
use database bullshit => Laden von bullshit
select * from haufen => Zeigt die Inhalte der Messung „haufen“ in der Datenbank „bullshit“
show measurements => zeigt Messungen in der gewählten Datenbank
show stats => Messstatistiken anzeigen
Node-Red abonniert die Topics vom MQTT-Broker und pumpt diese in InfluxDB, notwendiger Code => Null Zeilen, alles fertig.
Grafana
Grafana soll die InfluxDB-Daten visualsieren, das Dashboard von Node-Red kann das auch direkt per MQTT, aber nach einem Reboot ist alles weg und das „geht gar nicht“.
http://10.0.0.241:3000 (Benuzter: admin Passwort: admin) => add datasource => …
danach: neues Dashboard => Graph => auf Graph-/Dashboardtitel klicken um das editieren zu können (rot und kursiv, da ich das 2h nicht gefunden habe)
http://docs.grafana.org/features/datasources/influxdb/
Zu allem Elend kommt immer eine „mean“-Fehlermeldung beim Generieren des Plots mit Grafana.
Grund nach mehrstündigem Ver-/Suchen: MQTT bzw. InfluxDB legt die Daten als String in die Datenbank, Mittelwert ist daraus nicht zu bilden. quick&dirty-Lösung, in Node-Red ein json-Node wandelt das um.
In Grafana sieht das dann so aus:
Interessante Links zum Thema
http://air.imag.fr/index.php/Developing_IoT_Mashups_with_Docker,_MQTT,_Node-RED,_InfluxDB,_Grafana
https://primalcortex.wordpress.com/2017/02/23/setting-up-a-grafana-dashboard-using-node-red-and-influxdb-part-1-installing/
Grafana-Tuning:
http://www.neteye-blog.com/2017/02/how-to-tune-your-grafana-dashboards/