Luftdaten - Eigene Datenbank und Visualisierung mit InfluxDB und Grafana (mit Debian 10 Buster)

Einrichtung von InfluxDB mit Grafana um Luftdaten vom Sensorbaukasten zu visualisieren

Mit dem Luftdaten Sensorbaukasten lässt sich Feinstaub, Temperatur, Luftfeuchtigkeit und der Luftdruck messen. Standardmäßig übermittelt "airrohr" - so heißt der Baukasten - diese Werte automatisch an madavi und sensor.community. Ich möchte meine Roh-Daten aber auch selbst besitzen und nicht auf andere Services angewiesen sein. Deswegen habe ich eine eigene InfluxDB aufgesetzt und die Werte mit Grafana visualisiert. Das Ergebnis könnt ihr hier betrachten.

Und so könnt ihr euren eigenen Software-Stack aufbauen und eure Sensordaten visualisieren:

    1. Installieren von InfluxDB
      Ich benutze gerne Debian als Distribution und füge deswegen die Debian Repository als Quelle für apt hinzu:

      
      sudo apt update
      sudo apt install -y gnupg2 curl wget
      wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - 
      echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
      sudo apt update
      sudo apt install -y influxdb
      


    2. Anlegen eines Admins, Write-Users und Read only-Users in der InfluxDB
      Jetzt werden drei unterschiedliche Useraccounts angelegt:
      • Admin: Der Nutzer hat die Hoheit über die InfluxDB und kann neue Accounts anlegen, Datenbanken anlegen, Daten löschen schreiben etc. Er soll nur für administrative, aber nicht für operative Aufgaben genutzt werden
      • Write-User: Dieser Nutzer schreibt neue Sensordaten in die Datenbank und wird beim Sensor hinterlegt.
      • Read only-User: Diesen Nutzer verwenden wir in Grafana. Er kann nur Messdaten lesen.

      
      sudo influx
      # Ab jetzt geben wir influxdb Befehle ein
      # Als erstes erstellen wir unsere luftdaten Datenbank
      CREATE DATABASE luftdaten
      # Wir sagen, dass wir diese Datenbank auch nutzen wollen
      USE luftdaten
      # Wir erstellen einen neuen Admin-Nutzer
      CREATE USER admin WITH PASSWORD '' WITH ALL PRIVILEGES
      # Wir erstellen einen neuen Write-Nutzer
      CREATE USER luftdatenschreiber WITH PASSWORD ''
      # Wir erstellen einen neuen Read Only-Nutzer
      CREATE USER luftdatenleser WITH PASSWORD ''
      # Wir geben den neu erstellten Nutzern Privilegien auf die Datenbank
      GRANT WRITE ON "luftdaten" TO "luftdatenschreiber"
      GRANT READ ON "luftdaten" TO "luftdatenleser"
      

      Wichtig ist, dass drei unterschiedliche Passwörter verwendet werden. Im Anschluss muss die User-Authentifizierung noch aktiviert werden. Dies funktioniert, indem die Influxdb-Konfigurationsdatei bearbeitet wird:
      
      sudo nano /etc/influxdb/influxdb.conf
      
      ## Nach dieser Stelle suchen:
      [http]
        enabled = true
        bind-address = ":8086"
        auth-enabled = true # <--- Dieser Wert muss auf true gesetzt werden
        log-enabled = true
        write-tracing = false
        pprof-enabled = true
        pprof-auth-enabled = true
        debug-pprof-enabled = false
        ping-auth-enabled = true
        https-enabled = true
        https-certificate = "/etc/ssl/influxdb.pem"
      

      Danach starten wir den Influxdb-Service neu (sudo service influxdb restart). Auf meinem Server habe ich außerdem noch eine Firewall, bei der ich den Port 8086 freigeben muss (sudo ufw allow 8086/tcp). Danach ist die Influxdb schon eingerichtet 👍

    3. Luftsensor-Konfiguration anpassen
      Jetzt muss der Luftsensor angepasst werden, damit die neue Datenbank genutzt wird. Dafür wird die Konfigurationsseite des Sensors aufgerufen und unter "Konfiguration" die InfluxDB angegeben. Ein Häkchen neben InfluxDB setzen und dann die Logindaten für euren luftdatenschreiber eingeben. Wichtig: Achte darauf, dass du wirklich den User luftdatenschreiber verwendest und nicht admin oder luftdatenleser. Falls du SSL nicht eingerichtet hast (haben wir in dieser Anleitung nicht), darfst du neben SSL auch kein Häkchen setzen. Nach dem Abspeichern der Konfiguration startet der Sensor neu.

    4. Installieren von Grafana und Verbindung mit InfluxDB herstellen
      Wir sind kurz vor unserem Ziel. Jetzt müssen wir die einkommenden Sensordaten noch visualisieren. Ich verwende dafür Grafana:

      
      sudo apt-get install -y software-properties-common wget 
      wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
      echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
      sudo apt-get update
      sudo apt-get install grafana
      sudo service grafana-server start
      

      Ich selbst nutze nginx als reverse proxy und muss deswegen meine Konfiguration für Grafana anpassen. Falls du das nicht machst, kannst du Grafana öffnen, indem du auf http://DEINE-DOMAIN.ENDUNG:3000/ gehst. Ich kann einfach auf https://luftdaten.hilko.eu gehen und sehe dort dann meine Grafana Instanz.

      Zunächst müssen wir uns einloggen. Standardmäßig sind die Logindaten admin / admin, du musst das Passwort dann aber direkt beim ersten Einloggen ändern. Dann fügen wir unsere InfluxDB als Datenquelle hinzu. Dafür klickst du auf der linken Seite auf das Zahnrad und auf "Data Sources". Danach "Add Data Source" und "InfluxDB" auswählen. Die URL stelle ich auf "http://localhost:8086" und stelle unten bei InfluxDB Details die Logindaten für den luftdatenleser ein. Einmal auf "Save and test" klicken und dann sollte die Verbindung erfolgreich hergestellt worden sein 😊

    5. Visualisieren der Messdaten
      Jetzt kommt der letzte Teil: Wir visualsieren unsere Messdaten. Dafür klicken wir links auf die vier Quadrate und legen damit ein neues Dashboard an. Jetzt kannst du ein neues Pane hinzufügen und ein wenig herumexperimentieren, wie dir das Dashboard am besten gefällt.

      Wenn du die Temperatur visualisieren willst, kannst du das z.B. so machen:

Ich hoffe, ich konnte dir helfen dein eigenes Dashboard für deinen Luftdaten-Sensor einzurichten. Falls du noch Fragen hast, schreibe mir gerne eine Mail!