Was können wir jetzt noch mit unseren Hygrometerdaten machen?
Unsere eigenen Wetterdaten (siehe auch DIY (mini) BigData Hygrometer) lassen wir mittlerweile regelmäßig in unsere MariaDB schreiben, ergänzt wurde noch ein zweiter Raspberry Pi der die Daten auf der Terrasse verarbeitet. Nun wollen wir die Visualisierung – die bisher im Excel geschieht – etwas moderner gestalten und ein Dashboard mittels Superset anlegen. Als Bonus können wir mit einem guest Account auch vom Handy/Tablet (sofern in unserem WLAN) die aktuellen Daten aufrufen.
Schritt 1 – Apache Superset installieren
Als Basis dient eine Ubuntu 20.04 LTS Installation, in dieser werden wir Superset installieren und einrichten.
Benötigte Ubuntu Packages installieren
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev sudo apt-get install python3-venv
MariaDB installieren (für Superset Metastore) und einrichten
sudo apt-get install mariadb-server sudo mysql_secure_installation
sudo mysql -uroot -p mysql> GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY 'superset'; mysql> FLUSH PRIVILEGES; mysql> exit;
mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -uroot -psupserset mysql sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf [mysqld] default_time_zone = Europe/Vienna sudo systemctl restart mysql
Superset Python Environment anlegen
cd python3 -m venv superset . superset/bin/activate pip install --upgrade setuptools pip
Superset & zusätzliche Pakete mit pip installieren
pip install cryptography==38.0.4 pip install WTForms==2.3.3 pip install Pillow pip install gevent pip install apache-superset deactivate
Superset MariaDB User anlegen und Berechtigungen vergeben
mysql -uroot -psuperset
CREATE DATABASE superset DEFAULT CHARACTER SET utf8; CREATE USER 'superset'@localhost IDENTIFIED BY 'superset'; GRANT all on superset.* to 'superset'@localhost identified by 'superset'; flush privileges;
Superset Configuration anlegen
cd mkdir -p .superset vi .superset/superset_config.py # Superset specific config #------------------------------------------------------- ROW_LIMIT = 100000 SUPERSET_WEBSERVER_PORT = 8088 #------------------------------------------------------- #------------------------------------------------------- # Flask App Builder configuration #------------------------------------------------------- # Your App secret key SECRET_KEY = 'supersupersetsecret' # The SQLAlchemy connection string to your database backend # This connection defines the path to the database that stores your # superset metadata (slices, connections, tables, dashboards, ...). # Note that the connection information to connect to the datasources # you want to explore are managed directly in the web UI #SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db' SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset@localhost:3306/superset' #SQLLAB Timout auf 1h SQLLAB_TIMEOUT = 36000 # Flask-WTF flag for CSRF WTF_CSRF_ENABLED = True # Add endpoints that need to be exempt from CSRF protection WTF_CSRF_EXEMPT_LIST = [] # A CSRF token that expires in 1 year WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365 # Set this API key to enable Mapbox visualizations MAPBOX_API_KEY = '' Superset mit MariaDB Metastore einrichten
. superset/bin/activate sudo apt-get install libmariadb-dev pip install mysqlclient export FLASK_APP=superset export SUPERSET_CONFIG_PATH=/home/superset/.superset/superset_config.py superset fab create-admin #hier sind die Admin Daten und Passwort einzugeben superset db upgrade superset init deactivate
Kontrollieren ob Tabellen angelegt wurden:
mysql -usuperset -psuperset -Dsuperset -e "show tables;"
Systemd Service für Superset anlegen und starten
sudo vi /etc/systemd/system/superset.service [Unit] Description=Superset After=multi-user.target [Service] Type=simple User=superset Environment=SUPERSET_CONFIG_PATH=/home/superset/.superset/superset_config.py Environment=PYTHONPATH=/home/superset/superset Environment=FLASK_APP=superset WorkingDirectory = /home/superset/superset ExecStart=/home/superset/superset/bin/gunicorn -w 5 -k gevent --worker-connections 100 --timeout 120 -b 0.0.0.0:8088 --limit-request-line 0 --limit-request-field_size 0 "superset.app:create_app()" [Install] WantedBy=default.target
sudo systemctl daemon-reload sudo systemctl start superset.service
Schritt 2 – Dashboard zur Visualisierung in Superset anlegen
Bevor wir unser Dashboard für die Visualisierung der Daten erstellen können, müssen wir noch einige andere Sachen anlegen.
Datenbankverbindung einrichen
Unter Data → Databases können wir mit „+ DATABASE“ eine neue Verbindung anlegen.
In unsrem Fall eine Verbindung zur lokalen MariaDB mit dem user bme280
Nach dem Speichern wird uns die DB angezeigt
Chart anlegen
Unter SQL Lab → SQL Editor wählen wir die angelegte DB aus, das Schema bme280 und schreiben einfach das SQL:
Select * from terrasse;
Nachdem wir RUN gedrückt haben, sehen wir das Ergebnis und können mit „CREATE CHART“ unsere Abfrage als Dataset „BME280_Terrasse_20230316“ abspeichern:
Mit „SAVE & EXPLORE“ speichern wir das Dataset und in einem neuen Tab sehen wir den Chart Editor
Als Charttypen wählen wir Evolution → Dual Line Chart
„Time Column“ ist bereits richtig mit der Messzeit ausgewählt, als „Time Grain“ stellen wir „Minute“ ein
„Time Range“ setzen wir auf „Custom“ und nehmen „7 Days Before“ bis „Now“, damit wir immer nur die letzten 7 Tage angezeigt bekommen
Als Y Axis 1 bzw. 2 wählen wir Temperatur und Luftfeuchtigkeit aus
Mit „UPDATE CHART“ können wir unser Zwischenergebnis anzeigen lassen
Im Reiter „CUSTOMIZE“ können wir noch ein anderes „COLOR SCHEME“ auswählen, und die X Axis Beschriftung nach unseren Wünschen mit „%d.%m.%y %H:%M“ anpassen
Mit „SAVE“ speichern wir unser Chart ab
Angezeigt und editiert werden kann es jetzt unter „Charts“
Dashboard anlegen
Unter Dashboards → „+ DASHBOARD“ können wir jetzt unser Dashboard anlegen
Als Namen nehmen wir „BME280_Terrasse_20230316“ und ziehen unser erstelltes Chart ins Dashboard
Sollten wir mit dem Ergebnis zufrieden sein, speichern wir das Dashboard mit „SAVE“ und stellen es von Status Draft auf Published, damit es alle anderen mit Lese-Berechtigungen sehen können.
Das Dashboard wird jetzt unter „Dashboards“ angezeigt
So sieht unser fertiges Dashboard nun aus
Guest User anlegen
Um einen read-only User zu haben, werden wir unter Settings → List Roles → +
eine neue Rolle guest mit den folgenden Berechtigungen anlegen:
Wichtig ist hier das datasource access für unsere Datasource BME280_Terrasse_20230316
Zusätzlich legen wir den User guest an und weisen ihm die Rolle guest zu unter
Settings → List Users → +
Mit dem Guest-User eingeloggt, sehen wir somit nur noch die berechtigten Dashboards
Fazit
Die Installation und Einrichtung von Superset benötigt etwas Zeit, allerdings erhalten wir dafür ein kostenloses Opensource Tool, mit dessen Hilfe wir uns relativ einfach Dashboards zur Visualisierung erstellen können.
Durch die Weboberfläche und Userverwaltung können wir von unterschiedlichen Clients auf die Dashboards zugreifen.
Die Vielzahl an vorhandenen Charts lässt kaum Wünsche offen, mit dem SQL Editor können wir auch unsere eigenen SQL’s schreiben und daraus Charts basteln.