hast du eine "Bastelanleitung" oder ein paar weitere Schlagworte zum suchen?
Wie erwähnt, leider nein zur Bastelanleitung, aber mehr Schlagworte.
Sensor:
BME680
Mikrocontroller: ESP8266
MQTT Broker: RPi 3 mit MQTT
Zeitreihendatenbank: InfluxDB (nicht meine erste Wahl, aber sowas wie OpenTSDB das auf Hadoop läuft ist bei einem RPi einfach nicht so der Brüller)
VIsualisierung: Grafana (aktuell - will mir evt. mal was eigenes machen)
Keine Anleitung, da ich noch nie etwas mit Mikrocontrollern gemacht habe und das deswegen alles selbst machen wollte.
Den ESP8266 gibt es in tausend Ausführungen: vom reinen Chip für nur 5€ bis hin zu einer Variante schön auf einem Board gefittet mit LED/Knopf/USB Port/GPIO Ports etc. für ~15€. Gibt es von verschiedenen Herstellern, z.b.
den. Letzteres ist bequemer und geeigneter, wenn du ggf. noch was anderes mit dem Ding machen willst. Da es mein erstes Arduino-artiges Teil war, hab ich mir sowas geholt um auch ein bisschen mit Aufbauten mit Buttons, LEDs etc. spielen zu können um eine eingefrorenen Elektrotechnikkenntnisse gefahrlos wieder belüften zu können. Für die reine Anwendung nacher tuts dann aber auch die 5€ Version. Wie gesagt, ich wollte halt noch etwas nebenbei spielen.
Den Sensor gibt es für 10€ bereits in einer Variante die die Anschlüsse auf einem kleinen Board bereitstellen. Zwischen dem ESP8266 und BME680 gilt es dann wirklich nur noch die richtigen 4 Kabel zu verbinden und der elektrotechnische Teil ist durch.
Jetzt kommt der Programmierteil, den ich auch selber machen wollte.
Den Arduino-kompatiblen ESP8266 kann mit mit C/C++ programmieren, wobei auch eine Firmware existiert die dir Lua erlaubt. Wenn du bei C++ bleibst ertrinkst du förmlich in einem Meer an Programmierbeispielen.
Die hier genannten Bibliotheken kann man alle über die Arduino IDE via GUI installieren.
1.) WiFi (bereits vorhanden wenn es ESP8266 in der Arduino IDE konfiguriert wurde):
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html
Mehr als den QuickStart brauchst du gar nicht. Der ESP82688 kann weit mehr als sich mit WiFis verbinden: er kann gleichzeitig(!) ein Access Point sein, als Router sowie Modem fungieren. Das alles brauchen wir natürlich nicht.
2.) Der Basistreiber für den BME680 ist hier:
https://github.com/BoschSensortec/BME680_driver
Du kannst dir die Welt aber mit einem Wrapper einfacher machen:
https://github.com/adafruit/Adafruit_BME680 (via Arduino IDE installierbar)
Das zugehörige Beispiel ist wieder erschreckend kurz, macht aber alles was wir brauchen.
3.) MQTT: hier gibt es viel Auswahl, ich habe
https://github.com/knolleary/pubsubclient genutzt (auch via Arduino installierbar)
Man könnte jetzt die Beispiele aller drei Komponenten zusammenwerfen und hätte etwas funktionierendes. Ich hab mir aber ein kleines Scheduler-"Framework" geschrieben: Tasks, intelligente Task Steuerung, automatischer Deep Sleep, Logging via MQTT, Veränderung der Programmierung via MQTT Nachrichten an den ESP8266 im laufenden Betrieb und so Späße.
...und dann einen Großteil wieder rausgeworfen.
Wieso? Ich habe das hier entdeckt:
https://github.com/BoschSensortec/BSEC-Arduino-library
Eine proprietäre Bibliothek von Bosch. Sie zu installieren ist nicht trivial, aber der Anleitung kann man so folgen und es wurde auch auf ESP8266 Boards getestet. Kann bestätigen, dass es funktioniert.
Weshalb will man das? Nun, im Gegensatz zu ihrem Lowleveltreiber bietet mir das Ding 3 Sachen mehr: automatische Kalibrierung, einen "Indoor Air Quality" Wert (berechnet nach einer geheimen Boschformel...) und Temperaturwerte die den Einfluss des Heizers (für den Gaswiderstand) versuchen zu kompensieren. Nachdem ich das jetzt im Einsatz habe möchte ich das etwas relativieren: die "Kompensation" ist trivial und könnte man selbst auch machen, der IAQ ist interessant aber unnütz (ich starr halt nur gerne auf Graphen...) und ohne IAQ ist auch die Kalibrierung unnötig.
Dennoch, das verwende ich aktuell zum Auslesen des Sensors. Leider hat die Bibliothek einen Nachteil: sie ist deutlich weniger flexibel. Man
muss den Sensor alle 3 oder 300 Sekunden auslesen (wird zu Beginn eingestellt, kann nicht fliegend gewechselt werden). Muss? Ja, wenn man die Deadline verpasst, dann resettet sich der Genauigkeitswert wieder für einen halben Tag und man kann auf den IAQ nichts geben...
Das war ein Problem, denn obwohl mein Scheduler halbwegs deterministisch war, harte realtime boundaries konnte er nicht. Und in diesem Fall ist weniger einfach mehr...
300 Sekunden waren mir zu lang, aber es hat etwas gebraucht bis ich die 3 Sekunden auch unter Netzwerkproblemen halten konnte. Egal wie asynchron dein Code ist, es gibt gefühlt immer irgendwo eine Netzwerkfunktion unter dir die blockieren kann.
Aber wo landen die Daten nun? Auf dem RPi. Dort einfach "mosquitto" installieren und laufen lassen. Ist ein MQTT Broker. Keine Konfiguration notwendig.
Ein kleines Python Script von mir empfängt die Werte und stopft sie ungesehen in InfluxDB, welches ebenfalls auf dem RPi läuft. Endlich bei den Datenbanken angekommen, da bin ich zuhause
. Mit Zeitreihendatenbanken hatte ich zwar noch nichts zu tun, aber wenn man sich mal die Dokus anguggt, dann können die Dinger erschreckend wenig, also gibts auch nicht viel zu verstehen. Hab mir die jetzt so eingerichtet, dass es eine "staging area" gibt, die die volle Auflösung der Werte (also alle 3 Sekunden) für eine Woche vorhält. Es gibt eine "präzise" Ablage für einen Monat mit einer 30 Sekunden Auflösung und einen unbegrenzten Speicherbereich mit einer 2 minütigen Sensorauflösung. Für ein paar Jahre an Daten macht das eine kleine zweistellige Zahl an GB, also kein Problem für den RPi.
Ab jetzt geht alles via GUI. Grafana installiert und in der Weboberfläche die Datenbank angegeben. Nun kann man sich hübsche Graphen und sonstige Dashboards bauen.
Viele der von mir genannten Sachen muss man nicht selbst machen. So hab ich bei meinen Suchen natürlich diverse Anleitungen gefunden, die ähnliches gebaut haben, oder einen Teil davon. Z.B. mein Python Script zum übertragen der MQTT Nachrichten in die Datenbank, das müsste man nicht selbst machen, da gibt es via Tools wie "Telegraf" und Settings/Plugins nach Anleitung auch Lösungen.
Der BME680 ist gerade ein unglaublich beliebter Sensor. Er ist mit 10€ nicht ganz billig, aber bietet alle relevanten Werte in einem Paket. Entsprechend gibt es viele dokumentierte Projekte mit Anleitung dazu. Der ESP8266 ist gleichermaßen ein sehr beliebter, Arduino-kompatibler Controller mit großer Community. Durch seine WiFi-Natur findet er viel Verwendung in IoT Geschichten und entsprechend dürften auch hier viele Copy&Paste-baren Anleitungen existieren.
Edit: unglaublich, es gibt hier ein Zeichenlimit. Na dann weiter im nächsten Post. Die Trennung hier macht ohnehin Sinn.