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.
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:
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 S20 | Sensor |
GND | GND |
VCC | VIN/VCC |
RX | SDA |
TX | SCL |
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:
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:
Wenn die Sensoren angeschlossen sind können diese über Tools -> I2C Scan getestet werden. Die Ausgabe sollte dabei wie folgt aussehen:
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.
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:
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.
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.
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?
Hallo Thomas,
leider habe ich noch keine Zeit gefunden die Sensoren zu testen.
Grüße
Timo
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 ??
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
Hallo Venti,
danke für den Hinweis! Habe ich in der Beschreibung ergänzt.
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!
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
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.
Dummerweise setzt WordPress scheinbar die Anführungsstriche immer wieder „falsch“. Selbst wenn man sie im Text richtig eingibt 🙁
Hi Niels,
danke für den Hinweis. Die Anführungsstriche sollen jetzt passen 🙂
Pingback: MQTT Schaltsteckdose Gosund SP1 für Strommessung | Timos Blog