Jump to content

[Laeuft] Wetterstation - Grafische Temperaturanzeige in 10 Minuten. Protokoll 2


Recommended Posts

"Wetterstation" - Grafische Temperaturanzeige in 10 Minuten. Jetzt fuer Protokoll Version 2

Nachdem ich hier die Version fuer das Protokoll 1 veroeffentlicht habe hier nun die Scripte fuer Protokollversion 2. Einiges hat sich geaendert. Der Reihe nach ...

 

Bei diesem Projekt geht es darum automatisch eine Webseite zu erstellen, die benoetigten Temperaturwerte vorher abzufragen und die letzten 24 gemessenen Werte grafisch als Kurve darzustellen. Siehe Screenshot im Anhang.

Wenn man jede Stunde nur einen Wert misst oder nur Werte der "volle" Stunde benutzt, dann kann man die Temperaturkurve der letzten 24 Stunden darstellen. Das ganze sollte innerhalb weniger Minuten oder zumindest in kurzer Zeit zu bewerkstelligen sein, sofern man die unten genannten Voraussetzungen erfuellt.

 

Das Projekt richtet sich an alle die schnell einen Erfolg sehen wollen um dann mit mehr Freude weiterzumachen. Ich persoenlich finde es einfacher etwas laufendes zu modifizieren, als mit einer trockenen Doku anzufangen und ueber 1000 Fragen zu stolpern die ich nicht beantworten kann. Deshalb hier eine "Wetterstation" im Miniformat zum weiterbasteln.

 

Wer auf den ersten Blick 100 Sachen findet die man besser machen kann ist genau richtig hier. Er hat die Sache verstanden und kann dann das verbessern was er moechte. Manche Programmzeilen sind absichtlich schlicht gehalten, damit man sie besser nachvollziehen kann.

 

Folgedes Scenarien stelle ich mir fuer den Einsatz vor:

 

PC mit Zugriff uebers Netz auf Temperaturbricklet und Bereistellung der Htmlseite per Webserver.

oder

Scripte laufen auf dem gleichen PC an dem auch der Stack haengt und ein kleines ftp-script (not included) transferiert die erstellte Htmlseite auf einen einfachen Webspace im Internet.

oder

eine Mischform daraus :-)

 

Das ganze ist auf einem Debian 6.0.7 Server entstanden und sollte somit auf jedem Debian/Ubuntu Problemlos laufen. Debian 7 habe ich nicht getestet, es sollte aber nichts dagegen sprechen. Andere Linuxversionen moege man gerne testen.

 

Benoetigt wird:

Stack mit Temperatur Bricklet. Evtl. getestet mit "brickv".

Debian/Ubuntu PC fuer die Scripte

Evtl. ein Webserver.

Was NICHT benoetigt wird:

Datenbank

MySQL

PHP

APIs

Bindings (Nur wenn man das moechte)

Python (Wird von den Bindings benoetigt)

 

 

Der Weg in der Kurzfassung:

Das Script "temperatur-get.sh" mit UID und IP anpassen.

Cronjob mit Stunden oder Minuten Aufruf von "temperatur-get.sh" einrichten.

Grafiklibrary "flot" downloaden und auspacken.

Grafik per Browser anzeigen lassen.

Fertig.

 

Step by step Anleitung:

Auf der shell pruefen ob die Linuxtools "nc, bc, od, xxd" installiert sind. "which nc bc od xxd" usw. Hinweis siehe unten.

Ordner/Zielverzeichnis anlegen, mein Archiv "shelltemperaturminiv2.tar" runterladen und

die Files auspacken: "tar xvf shelltemperaturminiv2.tar"

Ggf. Rechte mit "chmod 755 *.sh" anpassen.

(Hinweis: Wer Ubuntu anstelle von Debian benutzt muss in den Scripten noch "nc -w1 ..." gegen "nc -q1 ..." tauschen)

 

Entweder Daten holen ohne Tinkerforge Bindings:

In "temperatur-get.sh" die IP und UID anpassen. Danach "./temperatur-get.sh" ausfuehren.

Es sollte in leserlicher Form die Temperatur angezeigt werden: "Die Temperatur betraegt: 23.06 Grad."

Der Pfad zur Datei "drawhtml.sh" sollte noch auskommentiert bleiben.

Jetzt "./temperatur-get.sh x" aufrufen. Nun erscheint eine Temperaturausgabe im Logfileformat.

So sollte bei Erfolg die Ausgabe aussehen: "20130625_14:53:55;1372164835;23.75"

 

Oder Daten holen mit Tinkerforge Bindings:

Als Alternative zu dem Script "temperatur-get.sh" von mir kann man auch die Tinkerforge Shell Bindings einsetzen. Nach dem runterladen und installieren lautet der Aufruf:

tinkerforge --host 192.168.xxx.xxx call temperature-bricklet --uid XXX get-temperature  --execute 'echo "scale=2; {temperature} / 100" | bc | xargs printf "`date +%Y%m%d_%H:%M:%S\";\"%s`;%s\n"' --replace

So sollte bei Erfolg die Ausgabe aussehen: "20130625_14:53:55;1372164835;23.75"

 

Nun das automatische Datensammeln: "crontab -e" aufrufen und folgende Zeile anpassen und einfuegen:

Wenn minuetlich gesammelt werden soll:

* * * * * /home/tinker/temperatur-get.sh x >> /home/tinker/temperatur.collect 2>/dev/null

Wenn stuendlich gesammelt werden soll dann so einsetzen:

0 * * * * /home/tinker/temperatur-get.sh x >> /home/tinker/temperatur.collect 2>/dev/null

(Bei Nutzung der Tinkerforge Bindings entsprechend anpassen)

 

Wenn nun mindestens 24 Werte zusammengekommen sind (cat temperatur.collect) kann man problemlos die Html Seite zeichnen lassen.

In "drawhtml.sh" den eigenen Pfad (DIRECTORY) und das Zielverzeichnis der erstellten Html Seite (WWWDIRECTORY) anpassen.

Die Datei "./drawhtml.sh" ausfuehren. Es kommt kein sichtbarer Output.

Ins Verzeichnis $WWWDIRECTORY wechseln. Dort sollte nun die Datei temperatur.html liegen.

 

Jetzt noch die Dateien "flot - Attractive Javascript plotting for jQuery" holen und auspacken. Dieses Paket wird benoetigt, damit der Browser die Grafik zeichnen kann.

Holen "wget http://flot.googlecode.com/files/flot-0.7.tar.gz"

Und im Verzeichnis $WWWDIRECTORY entpacken: "tar xvf flot-0.7.tar.gz"

Nun sollte es in $WWWDIRECTORY einen Ordner "flot" geben in dem die Files fuer die Javascriptunterstuetzung liegen.

Damit muss nichts gemacht werden. Wenn der Browser die "temperatur.html" laedt, dann holt er sich die notwendigen Dateien von dort selbstaendig. Siehe Html Quellcode von temperatur.html.

 

Das war es auch schon. Wenn man nun mit dem Broswer die Datei "temperatur.html" anclickt sollte sich die Seite mit den Temperaturwerten in grafischer Form oeffnen. Dies kann man lokal, also ohne Webserver direkt aus dem Filesystem ausprobieren oder man hat einen Webserver aufgesetzt den man nun komfortabel ansurfen kann. "http://MEINWEBSERVER/temperatur.html"

 

Damit nach den automatischen Datensammeln per cronjob auch jedesmal die automatische Erstellung der Webseite angestossen wird muss man

man noch am Ende der Datei "temperatur-get.sh" den absoluten Pfad zu "drawhtml.sh" angeben und das Kommentarzeichen entfernen.

 

Viel Erfolg.

 

Der Loetkolben

 

 

Anhang:

Details und einige Erklaerungen.

Die temporaeren "data.*" Files koennen liegenbleiben und helfen ggf. beim Verstehen. Wer sie loeschen will finded am Ende

der Scripte auskommentierte "## rm ..." Zeilen. Einfach Kommentarzeichen loeschen.

Folgende Shelltools muessen vorhanden sein: nc, bc, od, xxd

"od" ist im Paket "coreutils", "bc" ist ein eigenes Paket, "xxd" ist im Paket "vim-common".

Ein "apt-get install coreutils bc vim-common" sollte das Problem loesen. Fuer nc gibt es kein Paket, dass sollte schon mit dabei sein.

 

 

 

temperatur_html.jpg.212cd5142d3b710a732ece888c0dc245.jpg

shelltemperaturminiv2.tar

Link to post
Share on other sites

Ein kleiner Nachtrag wenn man anstelle der Temperatur den Luftdruck anzeigen lassen moechte. Fuer den Luftdruck gibt es das passende Script hier im Anhang.

 

Wenn man die Tinkerforge Bindings benutzt muesste es so aussehen:

 

tinkerforge --host 192.168.xxx.xxx call barometer-bricklet --uid XXX get-air-pressure  --execute 'echo "scale=2; {air-pressure} / 1000" | bc | xargs printf "`date +%Y%m%d_%H:%M:%S\";\"%s`;%s\n"' --replace

 

Ausgabe sieht so aus: 20130625_16:55:45;1372172145;999.11

 

Die Namen in den anderen Scripten/Templates sind sinngemaess anzupassen.  ;)

 

Der Loetkolben

airpressure-get.tar

Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...