Sensor all the Things: Günstige Sensoren zur Raumklima-Überwachung selbst bauen/frickeln

Fertiges Sensorpaket

Zwar kann ich mich (noch) nicht mit dem Gedanken der Hausautomatisierung anfreunden, dennoch habe ich schon länger mit dem Gedanken gespielt meine Wohnung mit Sensoren auszustatten. Ich wollte die Zimmer meiner Wohnung möglichst kostengünstig mit praktischen Sensoren ausstatten.

Disclaimer: Ich arbeite hier teilweise mit Geräten die in 220V eingesteckt werden. Wenn ihr nicht wisst was ihr tut: Finger weg! Und sowieso niemals nachmachen!

Die Hardware

Was braucht man alles? Sensoren, Broker, Datenbankserver und Stromversorgung. Alles am besten aus einer Hand. Natürlich gibt es sowas, aber doch ziemlich teuer. Hier die Hardware die ich verwendet habe:

Plattform

Ideal wäre ein Grundsystem mit WLAN, Platz für Sensoren, einer stabilen Stromversorgung und idealerweise noch ein schönes Gehäuse dazu. Zum Glück gibt es so etwas Ähnliches schon:

Sonoff Socket S20

Die S20 gibt es für ~10 Euro bei Aliexpress und bieten fast alles was wir brauchen. Darin enthalten ist ein ESP der für WLAN sorgt und die Zwischensteckdose ist sogar schaltbar. Dieses Feature ignoriere ich aber zunächst, da ich derzeit noch keinen Sinn darin sehe, meine Wohnung zu automatisieren. Die S20 sind robust verbaut und wenn man diese aufschraubt, kann man man 4 Pins erreichen, an die Sensoren angeschlossen werden können: Fast perfekt

Leider ist das Gehäuse vollständig geschlossen, weswegen ich die 4 Pins für die Sensoren nach außen gelegt habe.

Sensoren

Bei der Wahl der Sensoren habe ich mich aufgrund der limitierten Pin-Anzahl für I²C Sensoren entschieden. Diese können parallel zueinander an die 4 Pins gehängt werden. Mögliche Sensoren (eine Auswahl):

  • BMP280
    • Luftdruck
    • Temperatur
    • Luftfeuchtigkeit
    • ~2-3 Euro
  • BH1750
    • Helligkeit
    • ~1-2 Euro
  • CCS811
    • Luftqualität
    • ~10 Euro
  • BME680
    • Luftdruck
    • Temperatur
    • Luftfeuchtigkeit
    • Luftqualität
    • ~15 Euro

Ich hab mich zunächst mal nur für BMP280 (sehr günstig und sehr praktisch) und den BH1750 (kostet fast nix, ich weiß noch nicht was ich mit den Werten anfange) entschieden.

Die Luftqualitätssensoren habe ich bestellt und ein Test steht noch aus. Allerdings bin ich noch nicht ganz überzeugt. Ich hätte gerne einen C0x Sensor aber sowas ist einfach super teuer.

Hardware zusammenbauen

Im Grunde muss für die Vorbereitung der Hardware einige Kabel angelötet werden, die Sensoren aufgesteckt werden und eine neue Firmware konfiguriert werden.

S20 vorbereiten und neue Firmware flashen

Der Sonoff S20 kann über das Lösen von drei Schrauben geöffnet werden. Anschließend kann man auf der Platine vier Anschlussmöglichkeiten. Da es absolut nicht zu empfehlen ist, bei geöffnetem Gehäuse die S20 mit Strom zu versorgen. Die Anschlüsse können über vier Kabel und einem kleinen Loch nach draußen geführt werden.

Die Platine eines Sonoff S20 mit aufgelöteten Kabeln

Verbesserungsidee für die Profis: Vierpolige Klinkenstecker bzw. -buchsen eigenen sich hervorragend um die Anschlüsse sauber nach draußen zu führen.

Das Pinout ist in folgendem Bild zu erkennen:

Pinout Sonoff S20

Firmware konfigurieren

Als Firmware verwende ich ESPEasy (Github, Hauptseite). Dazu benötigt man zunächst die Software aus dem neusten Release von Github: https://github.com/letscontrolit/ESPEasy/releases und den dazu passenden Flasher für ESPs. Da die Anleitung etwas ausführlicher ist und ich dieses noch an einem Beispiel nachvollziehen muss, würde ich zunächst hierauf verzichten und dies noch nachreichen. Wenn ihr es trotzdem vermisst, einfach einen Kommentar schreiben.

Sensorpaket löten

Die angesprochenen I2C Sensoren können parallel angebracht werden und benötigen neben der Stromversorgung nur zwei Leitungen. Zu beachten ist dabei nur:

Sonoff S20Sensor
GNDGND
VCCVIN/VCC
RXSDA
TXSCL
Zwei Sensoren gestapelt

Sonoff S20 konfigurieren

Die neue Firmware stellt ein Webinterface zur Verfügung. Die IP-Adresse wird dabei beim Flashen angezeigt. Solltet ihr verpasst haben, die IP-Adresse zu notieren, könnt ihr in eurem Router nochmal nachsehen oder die IP-Adresse per nmap herausfinden.

Auf die Beschreibung der üblichen Konfigurationen wie WIFI, NTP und Co verzichte ich an dieser Stelle. Hier kann man sich gut durchklicken und die Infos sollten klar sein.

Controller konfigurieren

Für den Controller verwenden wir ein Raspi. Wie dieser konfiguriert wird, ist weiter unten zu sehen. Leider beißt sich hier die Katze in den Schwanz, denn für die Konfiguration benötigt man die IP-Adresse des Controllers. Bitte zunächst also den Raspi fertig einrichten und hier wieder weitermachen. Der Controller ist dazu da, die Daten, die am ESP Easy erfasst werden, weiterzuverarbeiten und zu speichern. Eine Beispielkonfiguration für den Raspi sieht wie folgt aus:

Controller-Konfigratuion für den Raspi

I2C Sensoren aktivieren

Um Pins für die Sensoren frei zu kriegen, muss zunächst der serielle Port abgeschaltet werden. Unter Tools -> Advanced -> Enable Serial Port deaktivieren. Anschließend den Controller neustarten. Danach unter Hardware -> I2C Interface die korrekten Pins einstellen:

Pinbelegung für die Sonoff S20

Wenn die Sensoren angeschlossen sind können diese über Tools -> I2C Scan getestet werden. Die Ausgabe sollte dabei wie folgt aussehen:

I2C Scan bei ESP Easy
I2C Scan bei ESP Easy

Im obigen Beispiel werden zwei Sensoren erkannt und gleich die vermuteten Sensoren angezeigt. In diesem Fall: BH1750 und BMP280. Die Sensoren können nun über Devices konfiguriert werden. Hier ein Beispiel für den BMP280. Zu beachten ist, dass „Send to Controller“ nicht aktiv ist, solange kein Controller konfiguriert ist. Ein Controller muss zunächst installiert werden.

Beispielkonfiguration für BMP280

So können auch noch weitere Sensoren konfiguriert werden. Ob die Sensoren vom ESP Easy unterstützt werden kann im Umfangreichen Wiki nachgelesen werden: https://www.letscontrolit.com/wiki/index.php?title=Devices

Server installieren und konfigurieren

Als Server fungiert ein einfacher Raspberry Pi 3 (35 €). Hier funktioniert aber alles auf dem man folgende Tools installieren kann:

  • InfluxDB
  • Grafana (optional)
  • Telegraf
  • Mosquitto

Ein allgemeiner Hinweis: Ich gehe in diesem Beitrag aus gründen der Komplexität nicht auf die Sicherheit eurere Systeme ein. Bitte informiert euch selbst, wie ihr  

Rasbian installieren

Als Betriebssystem für den Rapsi verwende ich Rasbian. Dazu gibt es offizielle Anleitungen, wie dieses installiert werden kann. In dieser Anleitung verzichte ich darauf.

Mosquitto installieren

Mosquitto ist ein einfacher MQTT message broker. Die Installation und das starten ist dabei relativ einfach:

sudo apt install mosquitto mosquitto-clients
sudo systemctl enable mosquitto.service
sudo systemctl start mosquitto.service

Mosquitto kann über das File /etc/mosquitto/mosquitto.conf konfiguriert werden. Wenn man keine Authentifizierung möchte, reicht die standard-config aus.

InfluxDB installieren

Als Datenbank-Backend verwenden wir InfluxDB. influx ist eine Zeitreihendatenbank und eignet sich besonders gut für die Art der erfassten Daten. Dazu zunächst die Datei
/etc/apt/sources.list.d/influxdb.list mit folgendem Inhalt erstellen:

deb https://repos.influxdata.com/debian stretch stable

Achtung: Hier wird eine Paketquelle aus einer potentiell nicht vertrauenswürdigen Quelle verwendet. Dies ist immer mit Vorsicht zu genießen. Da dies aber die Paketquelle von Influx selbst ist, ist diese relativ vertrauenswürdig.

Nun werden wir root, installieren den RSA-Key von influx und installieren die Datenbank:

sudo su
curl -sL https://repos.influxdata.com/influxdb.key | apt-key add -

apt update
apt install influxdb

Telegraf installieren und konfigurieren

Um die mqtt-Daten zu erfassen, kann Telegraf verwendet werden. Nebenbei erhält man dann auch noch Daten der Auslastung des Raspi. Das Paket telegraf kommt aus den selben Quellen wie die influx-Datenbank.

apt install telegraf

Nach der Installation muss die Config-Datei unter /etc/telegraf/telegraf.conf angepasst werden. Die Meisten Punkte müssen lediglich auskommentiert werden. Wenn keine weiteren Änderungen nötig sind, kann der unten stehende Config-Teil auch einfach ans Ende der Datei kopiert werden.

# Read metrics from MQTT topic(s)
[[inputs.mqtt_consumer]]

## MQTT broker URLs to be used. The format should be scheme://host:port,
## schema can be tcp, ssl, or ws.
servers = ["tcp://localhost:1883"]

## Topics to subscribe to
topics = ["#",]

## Pin mqtt_consumer to specific data format
data_format = "value"
data_type = "float" ist

Anschließend müssen noch beide Services enabled und gestartet werden.

systemctl daemon-reload

systemctl enable influxdb.service
systemctl start influxdb.service

systemctl enable telegraf.service
systemctl start telegraf.service

Grundsätzlich reicht dieses Setup schon aus. Auch können ab jetzt schon die Daten in der InfluxDB gefunden werden. Allerdings wollen wir die Daten auch visuell besser aufbereiten.

Grafana Installieren

Grafana eignet sich hervorragend für die Darstellung der von uns erfassten Daten. Leider ist die Version des grafana im rapsi-repo sehr alt, daher nehmen wir auch hier eine andere Version. Weitere Informationen zur Installation der Paketquellen zu grafana sind hier zu finden: http://docs.grafana.org/installation/debian/ Erstellt dazu /etc/apt/sources.list.d/grafana.list mit folgendem Inhalt:

deb https://packages.grafana.com/oss/deb stable main

Achtung: Hier wird eine Paketquelle aus einer potentiell nicht vertrauenswürdigen Quelle verwendet. Dies ist immer mit Vorsicht zu genießen. Dies ist allerdings der von Grafana selbst gewählte Weg. Nun muss noch der GPG-Key für das Grafana-Paket installiert werden:

curl https://packages.grafana.com/gpg.key | sudo apt-key add -

Anschließend

apt update
apt install grafana
systemctl daemon-reload
systemctl enable grafana-server.service
systemctl start grafana-server.service

Ab jetzt kann man unter der IP-Adresse des Raspis und dem Port :3000 Grafana erreichen:

http://192.168.123.123:3000

Für die weitere Konfiguration einfach dem Webinterface folgen und z.B. einen Benutzer einrichten bzw. Passwörter ändern. Der Standard-Benutzer ist admin mit dem Passwort admin.

Beispiel für Darstellung erfasster Daten

Ab hier sind euch alle Freiheiten gegeben, die erfassten Daten grafisch aufzubereiten. Als Beispiel die Erfassung der Raumtemperatur mit drei Sensoren. Dazu einfach ein „Panel“ hinzufügen und folgende Daten erfassen:

Beispiel für die grafische Aufbereitung der erfassten Daten mit Grafana

Anschließend können noch die Achsen und die Legende bearbeitet werden. Hier empfiehlt es sich die verschiedenen Einstellmöglichkeiten einfach durchzubprobieren. Man hat hier sehr viele Einstellmöglichkeiten. Anschließend sollten die Daten aufbereitet werden und als Grafik dargestellt werden:

Gimiks

Da wir nun Telegraf für die Datenerfassung nutzen, können wir auch die Daten des Rapsi auswerten. Telegraf erfasst alle Daten des Raspi automatisch. Also Load, Temperatur, CPU Auslastung etc. Natürlich ist das nicht nötig, aber wenn wir die Daten schon erfassen, können wir diese doch auch gleich mit Grafana auswerten. Eien tolle Funktion in Grafana: Man kann sich fertige Dashboards hinzufügen. Unter https://grafana.com/dashboards findet man verschiedene fertige Dahsboards mit einer dazugehörigen ID. Beispiele für Telegraf sind z.B. das Dashboard mit der ID 61 oder 928. Dazu einfach seitlich auf das „+“ -> Import Dashboard und anschließend die gewünschte ID eingeben. Im folgenden Dialog muss noch die Datenquelle (InfluxDB) angepasst werden auf telegraf.

Beispiel-Dashboard für Telegraf (928)

Updates

[04.02.2019] Update der Paketquellen und Gimiks

Grafana hat nun endlich selbst eine Paketquelle für das aktuelle Grafana. Dies wurde in der Anleitung ergänzt.

Es gibt jetzt auch die Anleitung wie ich die Prozessdaten des Raspi erfassen kann.

[11.02.2019] Mosquitto ergänzt

Ich habe doch tatsächlich den Teil über Mosquitto vergessen. ist jetzt ergänzt.

11 Gedanken zu „Sensor all the Things: Günstige Sensoren zur Raumklima-Überwachung selbst bauen/frickeln

  1. Thomas

    Habe eben Deine Anleitung zur S20 Dose gelesen.
    Danke für die gute Beschreibung.
    Hast Du inzwischen Erfahrung mit dem CCS811 Seonsor und Espeasy machen können?

    Antworten
  2. Sven

    Hallo,
    vielen Dank für die Anleitung.
    Ich hänge nur leider an der Datenbank Anbindung.
    Und zwar finde ich bei Grafana die Seite nicht wo man den „Input von dem BME280“ einrichtet..
    Irgendwie hänge ich da fest.
    Hat evtl. jemand einen Tipp ??

    Antworten
  3. venti

    Bei mir wurden die Daten erst dann in die InfluxDB geschrieben, wenn der Telegraf mqtt_consumer explizit auf ein Datenformat festgelegt wurde:
    Also in der .conf am noch festlegen, dass
    data_format = „value“
    data_type = „float“ ist

    Erst dann hat systemctl status telegraf keine Fehler beim Parsen mehr angezeigt

    Antworten
  4. Tim

    Hallo,

    Erstmal vielen Dank für die Anleitung. Leider zeigt Grafana „no data“ an. Telegraf, Mosquitto und Influxdb zeigen keine Fehler an. Muss ich den mqtt_consumer irgendwo anlegen oder nur in die influxdb schreiben?

    Ich habe in der influxdb folgende Datenbank erstellt: openhab_db mit dem User: grafana und dem Passwort: Test

    Vielen Dank für die Hilfe!

    Antworten
    1. marove Beitragsautor

      Hallo Tim,

      ich werde mich erst in ein paar Wochen in das Thema wieder fuchsen können. Ich hab deinen Kommentar freigeschalten in der Hoffnung, dass jemand Anderes antworten kann.

      Grüße
      Timo

      Antworten
  5. Niels

    Danke für die gute Anleitung. Leider enthält das Listing für die telegraf.conf Datei falsche Anführungsstriche. Statt
    data_format = „value“
    muss es
    data_format = „value“
    lauten.

    Antworten
  6. Pingback: MQTT Schaltsteckdose Gosund SP1 für Strommessung | Timos Blog

Schreibe einen Kommentar zu venti Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.