Selbst gehostete Datenplattform
Ein privates System, das ich vollständig selbst betreibe. Es sammelt, was ich an einem Tag esse, wie ich mich fühle, was ich tue, wie meine Vitalwerte aussehen und wie die Luft in dem Raum ist, in dem ich gerade sitze. Ziel ist es, Zusammenhänge sichtbar zu machen, die ohne durchgehende Messung unsichtbar bleiben, etwa zwischen Sport am Vortag und der Stimmung oder zwischen Luftqualität und Konzentration.
Kern ist eine Django Anwendung, die Ernährung und Kalorien pro Tag erfasst und gleichzeitig als REST-Schnittstelle für alles andere dient. Zwei selbst gebaute Flutter Apps schicken Stimmung und Aktivitäten dorthin. Im Raum hängen ESP32-Boards mit BME680-Sensoren für Temperatur, Luftfeuchte, Luftdruck und Luftqualität. An jeder Tür klebt ein NFC-Tag. Einmal mit dem Handy scannen, und ein Aufruf der Schnittstelle startet die Sitzung für den Raum, in dem ich mich aufhalte. Die Vitaldaten meiner Fitbit Inspire 3 holt ein eigener Import über die Google Health API dazu.
Die Rohdaten landen in MySQL. Apache Airflow DAGs räumen sie auf, bringen die sehr unterschiedlichen Quellen in ein gemeinsames Format und legen ML-fähige Datensätze ab. Modelliert wird in einer Anaconda-Umgebung mit TensorFlow und scikit-learn.
Der Betrieb gehört zum Projekt dazu. Alles läuft auf einem Proxmox Hypervisor bei mir zu Hause, aufgeteilt auf getrennte Ubuntu Server VMs für die Django Anwendung, die MySQL Datenbanken und die Analyseumgebung. Virtualisierung, Netzwerk, Nutzerrechte, Backups und Updates liegen damit genauso bei mir wie der Code.
- Django
- REST-API
- Flutter
- ESP32 / BME680
- NFC
- Google Health API
- MySQL
- Apache Airflow
- TensorFlow
- scikit-learn
- Proxmox
- Virtualisierung
- Ubuntu Server
Vom Sensor bis zum Modell, in vier Schritten.
Erfassen
- Flutter-App · Stimmung
- Flutter-App · Aktivitäten
- ESP32 + BME680 · Raumklima
- NFC-Tag · Raumsession
- Google Health API · Vitaldaten
- Web-Formular · Lebensmittel
Aufnehmen
- Django · REST-Endpunkte
- MySQL · Rohdaten
Aufbereiten
- Apache Airflow · DAGs
- Bereinigung & Zusammenführung
Auswerten
- TensorFlow
- scikit-learn