Wetter-Cam [Kapitel 3: Software-Design]

software_design_header

[ Einleitung ]

Planung: Done.
Aufbau: Done.
Software: ööh.. D’oh!

Hmm, alles ist fix und fertig aufgebaut, aber was bringt uns das?
Bis jetzt noch gar nix.
Warum?
Na, weil wir noch nix damit machen.
Wollen wir das ändern?
Ähm… Ja!
Na dann los!

( — äußerst fesselndes Selbstgespräch vor meiner Kaffeemaschine — )

 

[ Wiederholung der Ziele ]

In Kapitel 1 haben wir bereits unsere Ziele definiert, hier nochmals eine kurze Zusammenfassung:

  1. 60-Sekunden-Intervall: ein Bild inkl. Thumbnail für die WetterCam schießen (Webcam.jpg bzw. Webcam_klein.jpg)
  2. 15-Minuten-Intervall: ein Bild für den Tagesverlauf schießen (verlauf_hh_mm.jpg)
  3. Wenn keine Internetverbindung vorhanden ist müssen die Bilder temporär auf dem Raspberry gespeichert werden und auf den FTP verschoben werden, sobald die Internetverbindung wiederhergestellt ist

 

[ Programmiersprache ]

Da ich beruflich sowie privat hauptsächlich mit Java zu tun habe (nein, ich bin kein Touristenführer und nein, ich arbeite auch nicht in einer Kaffeerösterei), ist mir die Wahl der Programmiersprache natürlich nicht all zu schwer gefallen. java ;)

 

root@raspberrypi:~# java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)

Aaaah, perfekt =) Los geht’s!

 

[ Planung ]

Wir müssen also zu bestimmten definierten Zeitpunkten bestimmte Aktionen ausführen.

Wäre doch wirklich praktisch, wenn es in Java so etwas wie Timer geben würde, nicht? Moment mal:

java.util.Timer

A facility for threads to schedule tasks for future execution in a background thread. Tasks may be scheduled for one-time execution, or for repeated execution at regular intervals. (Auszug aus der Javadoc)

Klingt doch genau nach dem, was wir suchen!
Doch was kann man mit einem Timer überhaupt machen? Na, natürlich TimerTasks ausführen:

java.util.TimerTask

A task that can be scheduled for one-time or repeated execution by a Timer.

Klingt doch easy, oder?

Am besten wir gliedern unser Programm in drei Teile:

  1. WebcamTask.java – unser Webcam-Bild inkl. Thumbnail
  2. TagesverlaufTask.java – unser Tagesverlauf
  3. TaskStarter.java – Starterklasse, welche die zwei Tasks erzeugt und jeweils zu den richtigen Zeitpunkten ausführt

 

[ Flowchart ]

Um die gewünschten Abläufe grafisch darzustellen, habe ich für jede Klasse ein Ablaufdiagramm erstellt:

TaskStarter / WebcamTask / TagesverlaufTask

TaskStarter / WebcamTask / TagesverlaufTask

 [ Kleine Zusatzinfo am Rande: Wie im Flowchart ‚WebcamTask.java‘ zu sehen ist, habe ich still und heimlich für mich eine weitere Funktion vorgesehen – Ich will mir die minütlichen Bilder als timelapse_<count>.jpg in einen eigenen mount-Ordner (in meinem Fall einfach der freigegebene Windows-Ordner meines Computers) abspeichern lassen. Wer freut sich schon auf das erste einwöchige WetterCam-TimeLapse-YouTube-Video? wink ]

 

[ Nächstes Kapitel ]

Software designt, Kaffeetasse leer, Schluss is‘ für heut, i mag nicht mehr.

( — melodramatischer Programmierer beim Anblick seiner geleerten Tasse Koffein — )

 

… und weiter geht’s das nächste Mal mit [Kapitel 4: Coding]. :)

~ signatur

Schreibe einen Kommentar

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