Jump to content

Wetterstation


Recommended Posts

Nachdem ich meine erste Wetterstation (www.sven-lindeboom.net) soweit fertig habe und auch schon einige kleinere Schwachstellen wie z.B. den Regensensor festgestellt habe, habe ich nach Hardware und Software gesucht um auch weitere Stationen ohne großen Aufwand aufbauen zu können.

Dabei bin ich auf Tinkerforge gestoßen. Außerdem sind Sensoren für Temperatur Luftfeuchtigkeit und Lichtstärke schon vorhanden. Schön ist an diesen Modulen auch das man die Werte der Sensoren mittels eines Callbacks bekommt der nur ausgelöst wird wenn sich der Sensorwert verändert. Dies hat eine geringere Belastung der DSL Leitung zur folge (was heute zwar nicht mehr so wichtig ist aber ein schöner Nebeneffekt ist. ) Außerdem war es wichtig das man die Stationen an einen einfachen DSL Anschluss hängen kann ohne gleich die Routerkonfig ändern zu müssen. Dazu habe ich mir ein Client-Server System überlegt was einen zentralen Server voraussetzt. Die einzelnen Stationen verbinden sich dann einfach automatisch mit dem Server und übergeben die per Callback ermittelten Werte. Sollte die Verbindung einmal nicht klappen wird der Wert auf der Station zwischengespeichert und bei der nächsten Verbindung mit übertragen. Durch meine Hardwareauswahl (Tinkerforge) muss ich an jeder Station einen kleinen PC haben auf dem die Software läuft. Um dies so klein und preisgünstig wie möglich hinzu bekommen, habe ich mich für einen Rasberry Pi entschieden. Die Software ist schon zu großen Teilen fertig aber noch nicht besonders ausgetestet, da ich im Moment noch auf die Hardware warte ;-) .

Client und Server habe ich beides in Java geschrieben. Zur Übertragung der Werte habe ich mir ein eigenes Protokoll ausgedacht, welches auf put, get und update Kommandos beruht. Wenn das erst mal soweit läuft möchte ich den Datenstrom gerne noch per AES verschlüsseln. Auf den Client gibt es eine zusätzliche „Updater“ Software über die die Client Software aktualisiert werden kann sollte ich mal was ändern wollen.

Als Server möchte ich auch gerne einen Rasberry Pi einsetzen. Alle Werte sollen später über ein Webseite einsehbar sein. Da hab ich mir noch nicht so die Gedanken drum gemacht. Ich habe aber ganz gute Erfahrungen mit der Diagrammbibliothek von JQuery gemacht. Da lassen sich sehr gut übersichtliche und anschauliche Diagramme mit erstellen.

Link zu diesem Kommentar
Share on other sites

  • Replies 178
  • Created
  • Letzte Antwort

Top Posters In This Topic

Cool! 8)

 

Ich nehme an du packst die Bricks und Bricklets in irgendein Gehäuse? Wie sieht das aus?

 

Wir möchten auf dauer auch gerne Gehäuse und Halterungen und sowas anbieten, wir sind uns aber noch nicht ganz einig wie die aussehen müssten.

 

Auf den Bildern auf deiner Homepage sieht es so aus als würdest du Platinen auf Holzbretter in einem (vermutlich wasserdichten) Gehäuse anschrauben. Das könntest du mit unseren Platinen ja so machen wie sie sind, einfach mit den Löchern in den Ecken. Würden dir irgendwelche zusätzlichen Halterungen oder Gehäuse helfen?

Link zu diesem Kommentar
Share on other sites

Hallo borg,

ja du hast recht ich habe dort ein wasserdichtes PVC Gehäuse genommen und eine Holzplatte eingebaut. Das ist soweit auch ganz gut hat aber den Nachteil das man immer die ganze Holzplatte raus nehmen muss um das Modul auszubauen. Bei der neuen Wetterstation werde ich ein ähnliches Gehäuse verwenden ein bisschen kleiner aber auch wasserdicht so das ich die Bricks und den Rasberry da rein bekomme(Ich hoffe ich bekomme keine Probleme mit der Wärme). Um aber diesem Problem mit der Bodenplatte aus dem weg zu gehen habe ich mir eine Adapterholzplatte gebaut. Sie ist 8 x 8 cm groß und ca 1cm dick. In der Mitte habe ich die 4 Löcher für meinen Stapel gemacht. Da das Gewinde von den Brickbefestigungen ca 9mm ist habe ich die Löcher von unten ein bisschen abgesenkt so das ich die Muttern noch aufschrauben kann. Außerdem habe ich in den an allen Seiten überstehenden 2cm Rand noch 4 Löcher gemacht, so das ich den Stapel nun bequem von oben anschrauben kann ohne gleich die ganze Bodenplatte herauszunehmen. Ich denke wenn ihr sowas z.B. nicht aus Holz sondern aus einem Stück gebogenem Blech anbieten würdet dann wären auch alle glücklich bei denen sich der Stapel schon mal auf dem Schreibtisch wegen zu vieler kabel verselbstständigt. Ich denke da an ein ganz einfaches 4 x 6cm Blechstück was an den Seiten jeweils 2mal gebogen ist und natürlich passende Löcher hat. Ich hoffe das war verständlich sonst stell ich gerne noch ein Bild ein ;-)

Link zu diesem Kommentar
Share on other sites

Hallo,

jaa also den Luftdruck messe ich bei meiner jetzigen Station mit dem MPX_4115A Sensor. Es wäre natürlich schön wenn dieser direkt als Bricklet realisiert werden würde. Sonst kann man ihn aber auch über ein AnalogIn Bricklet nutzen.

Niederschlagsmesser habe ich bis jetzt noch nicht realisiert nur ein Regensensor habe ich. Leider ist der nicht besonders zuverlässig wenn der Regen zu sauber ist.

 

Gruß Thunderbird

Link zu diesem Kommentar
Share on other sites

Nachdem ich am Montag meine Lieferung von Tinkerforge bekommen habe, konnte ich heute endlich den ersten Testlauf machen  :-)

Und ich muss sagen nachdem ich einige Kleinigkeiten geändert hatte lief alles super. Sobald sich ein Wert an den Sensoren ändert wird er an den Client geleitet und dieser schickt ihn dann an den Server und in die Datenbank. Außerdem wird die Tabelle für den entsprechenden Sensor automatisch angelegt wenn diese noch nicht vorhanden ist.

Sobald ich wieder ein bisschen Zeit habe geht es weiter :-)

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Soo nach einigen Tests ist nun auch endlich der merkwürdige Messfehler vom Temperaturbricklet weg :-)

http://www.tinkerunity.org/forum/index.php/topic,198.0.html

 

Vielen Dank nochmal Tinkerforge ;-)

 

 

Außerdem hab ich jetzt in mein WordPress Plugin Diagramme eingebaut, so das man den Verlauf der letzten 24 Stunden immer schön übersichtlich angezeigt bekommt.

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

Ich habe mich heute mal um den Windrichtungssensor gekümmert. Dazu habe ich einen TX23 Windsensor umgebaut. Der eine Teil ist die Windgeschwindigkeit. Der wird über ein IO4 Bricklet und ein Reedkontakt realisiert und ist schon länger in Betrieb. Die Windrichtungsanzeige funktioniert über eine Lochscheibe, die 4 IR Lichtschranken je nach Richtung verdeckt. Das ganze erfasse ich mit einem IO 16 Bricklet. Das ist zwar ein bisschen übertrieben da ich nur 4 Eingänge brauche, hat aber den Vorteil das ich keinen Spannungsteiler verwenden muss um die Lichtschranken mit 5V Spannung zu betrieben. In der Datenbank speichere ich den Dezimalwert der 4 Bits und vor dem Ausgeben wird dieser dann in den Buchstaben für die Richtung umgesetzt.

 

Als nächstes werde ich mich um den Regensensor kümmern.

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

So jetzt gibts auch die WetterPool Anbindung ;-)

 

http://www.wetterpool.de/station-19982.htm

 

Die Daten werden jede halbe Stunde an den WetterPool Server gesendet.

Dabei kann man in den Eigentschaften der Station genau einstellen, welche Werte übertragen werden und welche nicht. Da über den Server später auch mehrere Stationen angebunden sein können kann man auch auswählen welche Station ihre Daten überträgt und welche nicht.

 

Außerdem ist das JavaDoc vom Webservice online.

http://javadoc.sven-lindeboom.net/index.html

Link zu diesem Kommentar
Share on other sites

Es gibt mal wieder was neues :-)

Nachdem ich fast das ganze Wochenende an meinem kleinen Speicherplatzproblem rumprobiert habe und es jetzt endlich sauber läuft, bin ich wieder dabei einen neuen Sensor umzubauen. Ich habe das ganze mal hier -> http://www.sven-lindeboom.net/?page_id=235 mit ein paar Bildern dokumentiert. Und werde das auch noch weiterführen sobald ich wieder ein bisschen was gemacht habe. Es ist übrigens ein Regenmesser ;-)

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

Hallo zusammen,

hier mal wieder ein bisschen was neues ;-)

Oder besser gesagt was ich so als nächstes vor habe die Reihenfolge ist aber nicht unbedingt so wie hier.

Wenn ihr noch Ideen oder Anregungen habt immer her damit :-)

 

1. Updatesystem aus Server und Client löschen

Das Updatesystem läuft zwar einigermaßen ist aber recht komplex und sollte später besser in einem eigenen Paket aufgebaut werden. Erstmal fliegt es raus.

 

2. Client über "get" Befehl mit Sensordaten versorgen (keine Konfig mehr)

Dadurch kann man sich das doppelte konfigurieren in der DB und am Client sparen. Könnte sein das in der DB dazu noch ein zusätzliches Feld notwendig ist.

 

3. Clientkonfig auf Properties umstellen

Die verbleibende Konfigdatei wird auf Properties umgestellt, dadurch ist sie viel einfacher zu handhaben.

 

4. Regensensorseite auf Webseite anpassen (4,5 -> 0,5)

Da hat sich doch glatt ein kleiner Fehler bei der Berechnung eingeschlichen.

 

5. Strahlenschutz 2.0 Webseite fertig machen

Dokumentation vom Strahlenschutz fertig machen. Eigentlich wäre das schon längst der Fall wenn ich nicht vergessen hätte, die Speicherkarte wieder in die Kamera zu stecken ;-)

 

6. Speicherverbrauch reduzieren (Tools : http://openbook.galileocomputing.de/java7/1507_23_002.html#dodtp9a15d8d2-443c-457f-abda-f12703066f86)

Nachdem ich vor 2 Wochen Server und Webservice zusammen gelegt habe, steigt der Speicherverbrauch stetig an. Das muss ich mir mal genauer ansehen (ist im Moment aber nicht problematisch)

 

7. Wetterpool Autoabschaltung bei != 200ok als result

Nachdem am Dienstag Wetterpool wohl ganz ausgefallen ist und keine Daten mehr angenommen hat, würde ich gerne eine Autoabschaltung einbauen so das der Server dann nicht immer gegen die wand läuft.

 

8. Prüfen alternative Möglichkeit zur Webseitenanbindung (Socketanbindung)

Da der Webservice der in Java vorhanden ist eigentlich nur ein miniwebservice ist und nicht für den produktiven Einsatz geeignet ist, würde ich mich gerne nach alternativen umsehen. Einen "echten" Webservice dafür aufsetzen ist sicher zu viel des guten, aber es gibt ja auch die Möglichkeit Sockets in php(und anderen Sprachen) zu verwenden. Dadurch spare ich mir den ganze Overhead von xml habe aber auch wieder das Problem das ich ein möglichst flexibles Protokoll brauche.

 

9. Setzen eines Timeouts für den Serversocket (http://openbook.galileocomputing.de/java7/1507_11_007.html#dodtpca425a6a-db26-414d-b2bd-c23c5f5e283a)

Hab ich bis jetzt irgendwie vergessen ;-)

 

10. Umstellung auf Java 7 prüfen (switch(String))

In Java 7 gibt es einige schöne Neuerungen wie die "switch" Anweisung mit Strings das sollte einiges vereinfachen

 

11. Dokumentation bau Windrichtungsanzeige

jooo das ist wieder nen bisschen mehr arbeit

 

12. Wetterpooleinstellungen in der DB anpassen

Im Moment wäre es nicht möglich eine zweite Station mit Wetterpool zu verbinden. Da muss ich nochmal dran basteln

 

13. konsistentes Server Konzept

Um später mehrere Server untereinander zu verbinden muss ein Konzept und ein Protokoll her. Außerdem soll es eine Backuplösung geben fällt ein Server aus werden die Daten vom Client einfach an einen anderen weiter gereicht. Aber wie das gehen soll .... ;-)

 

14. Auslieferung Server und Client Quellcode/Jar File

Na klar das ganze soll ja jeder benutzen können

 

15. Dokumentation Drahtprotokoll/e

 

16. Mail Benachrichtigung bei Fehlern

Der Server soll eine Mail mit der Fehlermeldung senden wenn irgendwas nicht mehr geht.

Link zu diesem Kommentar
Share on other sites

Habe dieses Wochenende mal einiges Vereinheitlicht.

 

Also so sieht jetzt die Struktur meines Servers aus.

 

Configuration:

Liest aus einer Datei alle Einstellungen ein, die dann an die einzelnen Klassen und Threads weitergegeben werden.

 

Logger:

Ich hab mir nen eigenen Logger geschrieben, der einfach alle Meldungen in eine Datei packt.

 

Datenbank:

Das ist ein Interface, dass je nach Konfiguration die Datenbankanbindung implementiert. Das kann MySql sein oder was anderes die Funktionen die benötigt werden sind alle dort hinterlegt.

 

GarbageCl:

Das ist ein Thread, der jede Minute den GC aufruft damit der Speicherverbrauch möglichst klein bleibt.

 

Wetterpool

Damit werden alle 10 Minuten die aktuellen Werte an Wetterpool gesendet.

 

BackendServer:

Ist ein TCP ServerSocket der die Werte der einzelnen Stationen entgegen nimmt.

Protokoll: http://www.sven-lindeboom.net/?page_id=326

 

PresentationServer:

Das ist ein TCP ServerSocket über den man Wetterdaten abfragen kann. (z.B. von einer Webseite)

Klassendiagramm.thumb.png.f756183444e6993d73dddc86f37a88ad.png

Link zu diesem Kommentar
Share on other sites

Sieht alles sehr gut organisiert aus :) Eine Frage wirft sich mir jetzt auf zu:

 

GarbageCl:

Das ist ein Thread, der jede Minute den GC aufruft damit der Speicherverbrauch möglichst klein bleibt.

 

Worin besteht der Zweck den Speicher möglichst gering zu halten? Zum einen benötigt der GC ja auch Leistung, zum anderen wird er ja sowieso regelmäßig bzw. spätestens wenn Speicher benötigt wird, automatisch aufgerufen?

 

Fehlt nur noch nen WebService, der alle Informationen zur Verfügung stellen kann für Apps etc ;)

 

Schöne Grüße

Link zu diesem Kommentar
Share on other sites

Hallo,

ja du hast natürlich recht. In einen normalen Programm mache ich das natürlich auch nicht aber ich hatte bis vor kurzem einen Webservice eingebaut(Diesen MiniWebserver der schon bei Java dabei ist). Dieser hat den Speicherverbrauch auf dem sheevaplug aber immer so nach oben getrieben, dass das OS mein Programm automatisch beendet hat. Daraufhin habe ich diesen GarbageCl Thread aufgesetzt und seit dem lief es ohne Problem. Scheinbar ist openjre-6 nicht so speicherfreundlich.

Seit dem Wochenende habe ich den Webservice aber ganz rausgeschmissen und alle Anfragen laufen jetzt über den PresentationServer das ist einfach ein TCP Socket mit einem eigenen Protokoll. Auf der anderen Seite in der Homepage habe ich eine PHP API geschrieben. So ist es genauso einfach zu nutzen wie ein Webservice und ich spare mir noch den ganzen Overhead von XML. Sobald ich die PHP API ganz fertig habe werde ich die hier auch mal vorstellen.

Für Apps wollte ich dann auch eine Java API schreiben.

Link zu diesem Kommentar
Share on other sites

Soo noch ein kurzes Update.

Am Wochenende hab ich einiges geschafft. Der Client hat jetzt eine ordentliche Config Datei über die man Server, Port und Stationsnummer eintragen kann. Die Sensoren die an der Station angeschlossen sind werden automatisch vom Server nachgeladen. Außerdem hab ich einiges an Feintuning machen können. Wie zum Beispiel umbenennen von Paketen, Klassen usw.

 

Hier nochmal die schon merklich grüner gewordene ToDo Liste. http://www.sven-lindeboom.net/?page_id=149

Link zu diesem Kommentar
Share on other sites

Ja, Grün überwiegt :-)

 

Ich verfolge  deine Wetterstation schon, seit du angefangen hast, hier davon zu berichten. Muss jetzt auch endlich mal sagen: Echt tolles Projekt. Hättest du nicht Interesse, den einen oder anderen Teil deiner Anleitung etc. in die Wiki zu stellen?

Oder hast du das schon und ich habs nur nicht gefunden?

 

 

 

Link zu diesem Kommentar
Share on other sites

Soo hab mir heute mal ein paar Gedanken über ein Display für meine Station gemacht.

Dabei gibt es meiner Ansicht nach 2 Möglichkeiten:

 

1: Das LCD 20x4 Display was man irgendwo hin stellen kann und dort die aktuellen Werte anzeigen kann. Das ganze müsste man in den Client integrieren können.

 

2: Hatte da an was größeres gedacht z.B. ein elektronischer Bilderrahmen mit E-Mail Funktion. Der Server könnte dann aus den Werte eine Grafik zusammen bauen und diese dann per Mail an den Rahmen schicken. Dieser zeigt dann immer das letzte Bild was er bekommen hat an. Dazu muss ich mir son Teil mal besorgen und genauer ansehen :-)

 

Außerdem hab ich die Wetterpool Anbindung so umgebaut das sie jetzt auch mit mehreren Stationen problemlos läuft.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


×
×
  • Neu erstellen...