Swen Hopfe hat mit Arduino und Raspberry Pi schon einige interessante Projekte realisiert. Hier beschreibt er, wie man mit dem Raspberry Pi Daten von Wetter-Satelliten empfangen kann.
Wir können Daten von NOAA-Wetter-Satelliten abholen, die die Erde in einer Höhe von rund 800 km umkreisen. Damit wir die Daten empfangen können, bauen wir uns einen Kreuzdipol, optimiert auf 137-MHz-Empfang.

©Swen Hopfe
Unsere fertige Antenne steht auf dem Balkon, damit sie auch die Rückseite des Gebäudes erreichen kann. Mit einer Mastlänge von etwa 2 Metern klappt das. Der Dipol ist rechtsdrehend zirkular.

©Swen Hopfe
Wir arbeiten mit einer 50-Ohm-Zuleitung, L/4-Umwegleitung (zur Verbindung der Rohrstücke) und Transformationsleitung (zwei Teilstücke mit 75 Ohm). Die Dipol-Enden zur Befestigung bringen wir in einem Plastikgehäuse in einer gekauften Abzweig-Dose unter. Etwa 80 Zentimeter unterhalb haben wir einen Reflektor angebracht. Der Antennenausgang geht zu einem Software-Defined-Radio, ein kleiner Stick mit RTL-Chipsatz. Wir benutzen einen von Noo-Elec. Mit dem Stick haben wir eine USB-Verbindung zu einem Empfänger-Raspi, der den Stick steuert und die Dekodierung übernimmt. Dazu soll auf dem Pi rtl_fm zum Einsatz kommen.

©Swen Hopfe
Was muss man also tun, um den Raspi am RTL-Stick vorzubereiten?
Zuerst müssen wir die Installationsbasis auf neuesten Stand bringen:
$ sudo apt-get update $ sudo apt-get upgrade
in /etc/modprobe.d/ blacklisten , Beispielsweise in einer no-rtl.conf , die in das Verzeichnis eingestellt wird, mit folgenden Einträgen:
blacklist dvb_usb_rtl28xxu blacklist rtl2832 blacklist rtl2830
Alternativ kann auch die /etc/modprobe.d/raspi-blacklist.conf mit diesen Einträgen bestückt werden (am Ende anfügen). Als Editor ist dazu beispielsweise nano vorhanden. Ansonsten kann auch noch der Midnight-Commander installiert werden, der sich zur Navigation und zum anfänglichen Dateitransfer im Netzwerk ganz gut macht:
$ sudo apt-get install mc
Nun git, cmake, libusb und die Build-Essentials installieren:
$ sudo apt-get install git-core $ sudo apt-get install git $ sudo apt-get install cmake $ sudo apt-get install libusb-1.0-0-dev $ sudo apt-get install build-essential
Letztere sind meist schon auf dem neuesten Stand. Dann die rtl-sdr-Tools von Osmocom holen und bauen (man ist hier am Anfang im Home-Verzeichnis):
$ git clone git://git.osmocom.org/rtl-sdr.git $ cd rtl-sdr/ $ mkdir build $ cd build $ cmake ../ -DINSTALL_UDEV_RULES=ON $ make $ sudo make install $ sudo ldconfig $ cd ~ $ sudo cp ./rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/
Neu starten:
$ sudo reboot
Nach neuem Login am Pi die Installation testen:
$ rtl_test
Eine solche oder ähnliche Ausgabe sollte zu sehen sein:
# Found 1 device(s):Found 1 device(s): # 0: Generic, RTL2832U, SN: 77771111153705700 # # Using device 0: Generic RTL2832U # Found Rafael Micro R820T tuner # Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 # 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6 # Sampling at 2048000 S/s. # # Reading samples in async mode...
Damit sollte dann auch ein Testempfang um 137 MHz mittels
$ rtl_fm -f 137100000 -s 44100 -g 44 -p 55 -E wav -E deemp -F 9 -r 11025 test.wav
funktionieren und eine Audio-Datei entstehen, die (da adhoc ausgelöst) jetzt noch keine auswertbaren Daten enthält. Wurde ein Wetter-Satellit in der Nähe erkannt, werden wir aber so einen Aufruf mit entsprechender Empfangsfrequenz ( -f , je nachdem, um welchen NOAA-Satelliten es sich handelt) verwenden, um eine wav-Datei zur weiteren Verarbeitung zu erzeugen.

©Swen Hopfe
Mit diverser zusätzlicher Software kann man übrigens gut kontrollieren, ob ein geeignetes Signal von einem NOAA-Satelliten hereinkommt, weil die das eigene Gebiet zu ganz unterschiedlichen Tageszeiten überfliegen, da sie nicht im 24-Stunden-Rhythmus wiederkommen. Dazu brauchen wir noch eine Prediction-Software ( predict ).

©Swen Hopfe
Genau wie bei der anschließenden Dekodierung (wxtoimg) sind das bei mir Linux-Tools, die tagsüber auf einem Raspberry Pi automatisiert ablaufen. Und am Ende kriegt man dann ein nettes Bild in Normaldarstellung und Infrarot geliefert und auf die Website hochgeladen. Wie die Wetterfrösche…
Zunächst installieren wir also weitere Software auf unserem Empfangs-Pi, damit der auch die Sounddateien dekodieren kann. Dazu nutzen wir das beliebte wxtoimg (wir benötigen die Kommandozeilen-Version). Man bekommt es als Debian-Package für ARM von der Website www.wxtoimg.com/downloads/ und installiert es mit dpkg:
$ sudo dpkg -i wxtoimg-armhf-2.11.2-beta.deb
Danach geht
$ wxtoimg test.wav test.png
und wir haben unser erstes Zwischenziel erreicht!
Empfangen und Konvertieren der Signale ist das eine, die Vorhersage der Satelliten-Überflüge das andere. Unser Empfangs-Raspi soll dazu rechtzeitig ein- und ausgeschaltet werden und nicht ständig in Betrieb bleiben. Wir brauchen also noch eine funktionierende Prädiktion von geeigneten Wetter-Satelliten.

©Swen Hopfe
Diese könnte unser Hausserver übernehmen, da dieser ohnehin ständig online ist. Aber an der Stelle wollten wir vereinfachen, um nicht mehrmals am Tag einen zweiten Raspi fernzusteuern. Also wird die Empfangsinstallation nur zwischen 18 und 20 Uhr scharf geschaltet (über den FHEM-Hausautomationsserver und eine entsprechende Schaltsteckdose). Unser Skript läuft dann mittels crontab ein paar Minuten verzögert an und greift auf eine Predict-Installation zu. Das alte Tool predict erscheint als die beste Wahl, da man es auch gut in eigene Skripte einbinden kann.
sudo apt-get install predict
Damit sind alle Tools installiert. Falls noch nicht vorhanden, sollte python-paramiko noch geholt werden – bei uns die Grundlage für sftp und Upload auf die eigene Website. Damit man auch von NOAA-15, 18 und 19 (17 derzeit in der Abschaltung, Sinkflug) empfangen kann, sind noch die Auffrischung des Setups von predict (welche Satelliten berücksichtigt werden) bzw. der zugehörigen Keppler-Files notwendig. Das macht man, indem man sich eine aktuelle tle-Datei vom Server holt…

©Swen Hopfe
Wie sieht die Ablaufsteuerung nun aus?
Im Empfangs-Raspi haben wir dazu folgende lokale crontab -Einträge gemacht:
13 18 * * * /home/pi/weather/pre_update.sh 15 18 * * * python /home/pi/weather/noaacapture.py 45 19 * * * rm /home/pi/weather/*.wav 46 19 * * * rm /home/pi/weather/*.png
Wir nutzen das Capture-Skript noaacapture.py von Dr. Paul Brewer und haben im Python-Skript noch divers angepasst: die bevorzugten Satelliten und einen sftp -Upload (mittels python-paramiko) auf die eigene Website hinzugefügt, nebst einer FIFO-Warteschlange, in der in drei Dateien (sat[1..3].png) immer die drei aktuellsten Aufnahmen bereitstehen.
Außerdem beschränken wir uns auf ein gewisses Zeitfenster (18 bis 20 Uhr), ansonsten werden jeden Tag die Überflugdaten erneuert ( pre_update.sh ) und das Capture-Skript setzt ein. Divers erzeugte wav- und png-Dateien werden nach dem täglichen Bearbeitungslauf gelöscht, damit die SD-Karte des Pi nicht zuläuft.
Bekannte Probleme?
Ja, mittels rtl_fm ist es nicht möglich, während einer Aufnahme die Empfangsfrequenz zu ändern. Die optimale Frequenz schwankt aber, da sie vom Dopplereffekt beeinflusst ist, genau dann, wenn sich der betreffende Satellit über Kopf befindet. Der Kompromiss ist, Überflüge nur dann aufzunehmen, wenn sie auch genügend den eigenen Standort decken und nur das Zeitfenster auszuwerten, was man für eine vollständige Aufnahme (ordentliches Bild mit Telemetriedaten) mindestens braucht.
Swen Hopfe hat bereits etliche andere Projekte auf pcwelt.de vorgestellt:
So steuern Sie mit Raspberry Pi eine Infrarotkamera
Von der Heimautomatisierung zum Smart Home – ein Erfahrungsbericht
Mit Arduino den Füllstand einer Zisterne kontrollieren Arduino-Roboter fährt allein