body, html {font-family: 'Open Sans', sans-serif;} #nav a, #nav span.in{font-family: 'Open Sans', sans-serif;} #title #tagline {font-family: 'Open Sans', sans-serif;} #main .gridItem h3 {font-family: 'Open Sans', sans-serif;}

cloudbasierte Wetterstation

Natürlich besitze ich schon eine Wetterstation. Sogar eine ziemlich gute. Aber wie die meisten zeigt sie eben das aktuelle Wetter an und die Vorhersage für die nächsten Tage. Ich wollte aber schon immer eine haben, die das Wetter aufzeichnet. Also, dann mal lois und eine selbst bauen!

Zum Einsatz kommt ein BME280-Sensor von Bosch. Die kleine Platine ist mit 6 x 8 mm schon winzig:

Schnappschuss (2019-02-04 06.20.37)


Der eigentliche Chip selbst (auf dem Bild unten rechts) ist nur wenig größer als 1 mm! Dafür ist er aber hoch präzise. Bosch hat ihn für den Einsatz in Smartphones entwickelt. Aber gibt es eines, das Temperatur, Luftdruck und Luftfeuchtigkeit anzeigt? Ich kenne keines!

Zunächst war mein Ansatz, außen einen Sender und innen einen Empfänger zu bauen, beide sollten über Funk kommunizieren. Dies funktionierte nicht richtig und mittlerweile hatte ich im Internet die Seite „ThingSpeak“ entdeckt, auf der man Daten veröffentlichen kann. Nun änderte sich das Konzept: Die Außeneinheit sollte sich mit meinem WLAN verbinden und die Daten auf einen von mir erstellten Kanal bei ThingSpeak laden. Dazu verwendete ich zunächst einen ESP8266 Mikroprozessor zusammen mit meinem Arduino. Dann lernte ich, dass der ESP8266 auch allein ausreicht. 

Schnappschuss (2019-02-04 06.24.54)

Was nichts anderes bedeutet, als dass ich den Sketch (so nennt man die Programme) mehrfach komplett neu erstellen musste. Hier sieht man einen kleinen Ausschnitt (die Programiersprache ist C++):

Schnappschuss (2019-02-04 06.18.33)


Auch mein 3D-Drucker kam zum Einsatz. Der Sensor sollte zwar in das Gehäuse eingebaut werden und erstens Verbindung zur Außenluft haben aber zweitens vom sonstigen Innenraum des Gehäuses abgeschirmt sein. Dazu konstruierte ich diesen kleinen Kasten, der links unten eine Verbindung nach außen hat. Der Sensor sitzt ganz rechts und natürlich ist ein Deckel drauf:


51095839 2116891661760485 6089203035093860352 o


IMG 4421


Am Sonntagvormittag war dann alles fertig und so sieht die Box nun aus:

IMG 4425


Die Box ist qualitativ sehr hochwertig und besitzt eine Dichtung. Mir ist es schon sehr wichtig, dass die Bauteile gut geschützt sind. Man sieht auch, dass die Leitungen, die in die kleine grüne Sensorbox gehen, mit Heißkleber gut abgedichtet sind.

Und was bringt das alles nun? Ich kann mir so meinen Wetterverlauf anzeigen lassen:

Schnappschuss (2019-02-04 06.08.01)

Und nicht nur ich kann das, sondern jeder. Einfach auf diesen Link klicken und schon hat man die aktuellen Daten:

  • oben links: Temperatur
  • oben rechts: Luftdruck
  • unten links: relative Luftfeuchtigkeit
  • unten rechts: Standort

Was man schön sieht: Ich muss die Station an einen anderen Ort und in den Schatten verlegen. Am Sonntag knallte die Sonne auf die Box und erzeugte in ihr eine Temperatur von knapp 30°C. Das war natürlich zwar richtig gemessen, aber die Lufttemperatur lag mal bei gerade 8°C. 

Will noch jemand was zu den Kosten wissen? Alles zusammen, also mit Netzteil und relativ teurem Gehäuse, kosten die Einzelteile deutlich unter 50€.


Status 9.2.2019

Auch die Empfangsstation ist als Prototyp fertig. Es ist ein Raspberry Pi mit einem 5 inch Monitor, der eine Auflösung von 800 x 480 hat. 

Ich brauche jetzt noch unbedingt jemanden, der die notwendigen Ausschnitte in mein Aluminiumumgehäuse schneidet. Noch ein Wort zu den Kosten: Raspberry = 38 €, Monitor = 49€, Gehäuse mit Wandhalterung = 70€. Also mit allem Drumherum liegt die Empfangsstation bei ca. 180€, denn ich werde demjenigen, der die Ausschnitte in das Gehäuse schneidet, wohl noch auch was in die Hand legen müssen…

Hier ein Video über beide Teile.



Status 18.2.2019

Noch immer bin ich nicht wirklich mit dem Programm Screenly auf dem Raspberry Pi zufrieden. Von Zeit zu Zeit (zum Glück liegen Tage und nicht Stunden dazwischen) hängt sich das Programm auf. Ein kleiner Neustart hilft dann. Also werde ich in dem Gehäuse mal einen Ein/Aus-Schalter dafür berücksichtigen. Wo wir beim Gehäuse sind: Ich habe die Bemassung der Ausschnitte für das Alu-Gehäuse ebenfalls fertig. Wer sich das nun genau anschaut und sich über den 8 x 3 mm Ausschnitt oben links beim Raspberry Pi wundert, dem sei gesagt, das ist der Ausschnitt über der WLAN-Antenne. Ich möchte nicht, dass die Antenne komplett durch das Alu-Gehäuse abgedeckt wird. Ob das was bringt? er weiß’s…


Schnappschuss (2019-02-17 16.34.04)


Wetterstation Frontplatte - Bla


Status 20.2.2019

Ich finde die Unterschiede zwischen täglichen Höchst- und Niedrigsttemperaturen schon ziemlich beeindruckend…

Schnappschuss (2019-02-20 18.30.38)

Status 1.3.2019

Leider gibt es keinerlei Fortschritt mit meiner Empfangseinheit, also der, die die Ergebnisse anzeigt. Der Prototyp, basierend auf einem Raspberry Pi dödelt weiterhin in meinem Büro daheim herum.

Aber ich habe die Sendeeinheit deutlich verbessert:

  • Augenfälligste Neuerung wird sein, dass nun ein LCD-Display hinzugefügt wurde.
  • Zudem auch ein RTC-Modul (Real Time Clock), das beim Start und dann immer um 03:00 Uhr durch die „Internetzeit“ eines NTP Time Servers korrigiert wird. Natürlich erfolgt auch eine automatische Erkennung der Sommerzeit (auch wenn die angeblich 2020 in der EU abgeschafft werden soll).
  • Es erfolgt eine zweistufige Validierung der vom Sensor ermittelten Ergebnisse. Im ersten Schritt werden 5 Messungen durchgeführt und die beiden Extremwerte eliminiert. Aus den restlichen 3 Messungen wird ein Mittelwert gebildet. Im zweiten Schritt wird dieser Wert mit dem Wert der letzten Messung verglichen. Überschreitet die Differenz zwischen beiden Werten einen definierten Maximalwert, wird die Messung wiederholt.
  • Alles andere als trivial ist die Bestimmung des Trends. Gehen wir mal von einem steigenden Trend aus, dann reicht es nicht den aktuellen mit dem vorigen Wert zu vergleichen. Erfolgen die Messungen nämlich alle 30 Sekunden, ist es sehr wahrscheinlich, dass der aktuelle und der vorige Wert gleich sind. Hier habe ich mich an meine Studienzeit und das „exponential smoothing“ erinnert. 

Das folgende Video zeigt den „Sender“ der Wetterstation, die außerhalb montiert wird. Gezeigt wird die Initialisierung beim Hochfahren des Systems und dann der laufende Betrieb:



Status 17.3.2019

In der Zwischenzeit habe ich meinen Sketch deutlich erweitert. Dies ist neu:

  • Ich prüfe jetzt, ob die Daten auch von ThingSpeak angenommen wurden, wenn nicht, erfolgt ein erneutes Senden. Ist dies über mehr als 5 Minuten erfolglos, erfolgt ein Reboot des Systems.
  • Ist die WLAN-Verbindung unterbrochen, wird sie erneu aufgebaut. Bleibt dies für 5 Minuten erfolglos, erfolgt ebenfalls ein Reboot.
  • Und natürlich ist der Reboot selbst auch neu.

Natürlich kann ich mir unter „Laborbedingungen“, wenn der ESP mit meinem iMac verbunden ist, solche Ereignisse auf dem seriellen Monitor anzeigen lassen. Ich habe aber nach einem Ansatz gesucht, diese Information auch dann zu haben, wenn er nicht verbunden ist. Dies ist mein Ansatz:

  • Eine Variable, die zunächst 0 ist, wird mit den Events gefüllt. Dabei erhöht ein Rasend die Variable um +1, ein Reconnect um +10 und ein Reboot um +100.
  • Damit dieser Wert nicht verlohren geht, wird er im EEPROM gespeichert.
  • Bei ThingSpeak have ich einen vierten Kanal „Events“ aufgemacht und bei jedem Durchlauf der Main-Loop wird der Event zu TS geschrieben, wenn er ungleich Null ist.
  • Bei einem Restart des Systems wird der im EEPROM gepeicherte Wert gesendet.
Schnappschuss (2019-03-17 10.40.18)

Auf dem Bild oben, sieht man, dass ich den ESP am 14.3. gestartet habe. Danach erfolgten 3 Resends und gestern Abend ein Reboot.


Status 3.4.2019

Dies Projekt fordert eine Menge von mir. In den vergangenen Tagen habe ich festgestellt, dass das System einen Reboot durchführt, ohne dafür eigentlich einen Grund zu haben. Vorher passierte weder ein erfolgloser Resend noch Reconnect. Da ich der Sache auf die Spur kommen wollte, habe ich an unzähligen Stellen des Programms eine Kontrollvariable in den EEPROM geschrieben. Nach einem Reboot sollte diese Variable dann ausgelesen und in ein weiteres Feld bei ThingSpeak geschrieben werden. So wollte ich wissen, welches der letzte „Kontrollpunkt“ war, bevor der Reboot ausgeführt wurde.

Die Idee war wahrscheinlich gut, nur praktisch funktionierte sie nicht. Nach erfolgtem Reboot blieb das Programm beim Lesen der Zeit von einem NTP-Server einfach hängen. Und das nach jedem manuell durchgeführten Reboot. 

Da das überhaupt nichts miteinander zu tun hat und ich es auch nicht auflösen konnte, bin ich auf eine Vorversion zurückgegangen und habe von dort aus weiterentwickelt. 

Schnappschuss (2019-04-03 12.45.12)


Ich nun habe z.B. die Leseroutine des Sensors nun so verändert, dass „unglaubwürdige“ Werte (siehe grüne Kreise oben) nicht berücksichtigt werden. Ich lese nun 7 mal Werte ein, eliminiere den niedrigsten und höchsten und bilde aus den restlichen 5 den Mittelwert.

Nun brauche ich nur noch einige trockene Stunden, um die neueste Version auf den ESP zu flashen, denn der hängt ja im freien Teil unserer Dachterrasse.

Status 7.4.2019

Diese trockenen Strunden gab es in den letzten Tagen zur Genüge. Und wie man im Bild unten sieht, klappt es seit dem 4. April mit der Unterdrückung „unglaubwürdiger Werte“:

Schnappschuss (2019-04-07 15.50.02)

Zurzeit drucke ich erneut das Gehäuse für die Anzeigeeinheit. Ich bin eben kein Konstrukteur und stelle dann immer wieder nach dem Druck fest, was alles besser sein könnte. Die aktuellste Version des Sketches steht zum Download hier bereit. 


Ich denke mal, hiermit ist dieser Blogeintrag beendet.


Blog finished...


©  Olaf Goette 2008 - 2022