Motivation
Der Winter nähert sich in grossen Schritten. Es wird kühler draussen und die Heizung nimmt wieder ihren Dienst auf. Seit nun fast sechs Monaten teilen wir unser Schlafzimmer mit unserem Sohn. Im Frühling und Sommer war das Raumklima nie ein Thema, da es immer warm war und man mit offenem Fenster schlafen konnte.
Wenn aber drei Personen in einem kleinen Schlafzimmer schlafen und die Heizung auch noch läuft, ist das morgentliche Erwachen meist mit Husten und trockenem Mund verbunden, vor allem bei unserem kleinen Jungen.
Als methodisch denkender Mensch, wollte ich zuerst einige Daten erheben, bevor ich am System willkürlich Änderungen vornehme.
Hardware
Als Basis für mein Vorhaben dient ein ESP32 (LOLIN32 V1.0.0 ESP32 Board 4 MB FLASH). Dieser hat schon Wi-Fi an Board, kann I²C und hat einige GPIO. Ich möchte gerne die Temperatur, Luftfeuchtigkeit und die allgemeine Luftqualität messen. Dazu habe ich folgende Sensoren verwendet:
Da es sich um eine temporäre Installation handelt, ist alles auf einem Breadboard aufgebaut.
Software
Entwicklungsumgebung
Die ESP's können mit der Arduino IDE programmiert werden. Allerdings ist die Arduino IDE für einen Softwareentwickler keine ernsthafte Option. Es fehlt an den grundlegendsten Dingen. Darum verwende ich für solche Projekte immer VS Code mit der PlatformIO-Erweiterung.
Datenbank und Dashboard
Ein kurzer Disclaimer vorweg: InfuxDB 2.0 OSS ist noch nicht stable, aber ist als RC erhältlich. Die Enterprise Lösung von InfluxDB 2.0 ist allerdings schon länger erhältlich.
Mit InfluxDB 2.0 kommt die Datenbank und das Dashboard in einem Paket zusammen. Vor der Version 2.0 musste für das Dashboard immer noch Grafana oder Chronograf installiert werden. Bei der Datenbank handelt es sich um eine Zeitreihendatenbank, sie ist also keine relationale Datenbank. Für meinen Zweck ist das also perfekt.
Die InfluxDB läuft am schnellsten mit einem docker-compose up -d
.
version: '2'
services:
influxdb:
image: quay.io/influxdb/influxdb:2.0.0-rc
container_name: RoomClimateInfluxDB2
restart: always
ports:
- '9086:8086'
volumes:
- ./data:/root/.influxdbv2
command:
--reporting-disabled
Mit dem Flag --reporting-disabled
wird die Telemetrie deaktiviert.
Wenn der Container läuft, kann im Onboarding auf dem Webinterface (http://IPAdresse:9086
) die Datenbank konfiguriert werden.
Sobald alles eingerichtet ist, findet sich unter Data
eine Anleitung und der fertige Arduino Code inklusive Token, IP der Datenbank etc. Es müssen nur noch die Sensoren eingelesen werden und die Werte in die Datenbank geschrieben werden.
Das komplette Projekt ist auf Github https://github.com/MrReSc/RoomClimate/tree/main verfügbar.