Software

OpenWebRX auf einem Raspberry Pi

Der Raspberry Pi hat es innerhalb von wenigen Monaten nach seinem Erscheinen geschafft, Massen an Bastlern zu mobilisieren und eigene Projekte umzusetzen. Im Laufe der Zeit haben sich bei mir auch verschiedene Versionen des kleinen Mini-Computers angesammelt und ich habe schon zahlreiche Experimente mit dem kleinen Computer realisiert.
Grade für Funkamateure bietet sich der Mini-Rechner an, denn man kann sehr schnell und ohne großen Aufwand einige nützliche Dinge damit auf die Beine stellen. In Kombination mit einem DVB-T Stick oder einem anderen unterstützten SDR lässt sich innerhalb kurzer Zeit ein eigener Web-SDR Empfänger zusammenstellen.
Lötarbeiten sind dabei nicht erforderlich, die Basteleien finden ausschließlich per Software statt. Mittels Web-SDR kann man dann mit nahezu jedem beliebigen Browser auf die eigene Hardware und Antenne zugreifen – sofern gewünscht auch über das Internet.
Ferner lässt sich so ein offener Zugang zum eigenen SDR-Empfänger auch mit anderen Funkamateuren und Freunden teilen. So ein Projekt macht außerdem auch andere technisch versierte aber unlizensierte Freunde neugierig. Der eine oder andere wird dadurch zum SWL und später vielleicht zum Funkamateur.

Um ein Web-SDR zu realisieren wird ein Raspberry Pi oder ein Computer mit Linux benötigt. Die Softwarelösung, welche die Benutzerschnittstelle als Webseite realisiert nennt sich OpenWebRX. OpenWebRX verwendet die in libcsdr integrierten Demodulatoren und kann AM, FM und SSB Signale demodulieren. Die Anwendung setzt dabei auf HTML5 und nutzt moderne Technologien wie Web-Sockets und die WebAudio API. Prinzipiell läuft die Software auch auf einem Raspberry Pi 1 Modell B. Empfehlenswert ist das jedoch nicht, denn es ist wirklich furchtbar langsam und fast nicht benutzbar. Es sollte also unbedingt ein schnellerer Rechner wie z.B. der Raspberry Pi 2 oder 3 verwendet werden. Ein normaler PC mit Debian Linux oder Ubuntu lässt sich ebenfalls dafür nutzen. Die vorliegende Anleitung konzentriert sich aber auf den Raspberry Pi mit Raspian als Betriebssystem.

Empfänger

Als Empfänger nutzen wir in diesem Tutorial einen DVB-T Stick, wie er bei Funkamateuren häufig als SDR eingesetzt wird. Vor Neuanschaffung eines Sticks, bitte unbedingt auf Kompatibilität achten oder alternativ gleich zum DXPatrol oder ein anderes SDR zurückgreifen. Von OpenWebRX wird neben dem RTL-SDR auch noch der HackRF unterstützt. Die Unterstützung des SDRplay ist in einem experimentellen Stadium verfügbar. Weitere Informationen zu unterstützten Empfängern gibt es im OpenWebRX-Wiki.

Vorbereitung

Vor der eigentlichen Installation sollte sichergestellt sein, dass das Raspian auf dem Raspberry Pi aktuell ist. Zum Aktualisieren des Geräts werden die folgenden beiden Zeilen in der Kommandozeile ausgeführt.

sudo apt-get update
sudo apt-get upgrade

Anschließend werden einige Programme installiert, die zum Kompilieren und späteren Betrieb des Systems notwendig sind.

sudo apt-get install build-essential git libfftw3-dev cmake libusb-1.0-0-dev nmap git

Für die Durchführung dieser Anleitung legen wir uns mit dem Befehl mkdir ~/src ein Arbeitsverzeichnis an und verwenden dies später um die heruntergeladenen Quelldateien abzulegen. Wenn alle Programme korrekt installiert wurden, folgt die Installation des DVB-T Sticks. Raspian bringt zwar bereits einen Treiber für DVB-T Sticks mit. Dieser lässt sich jedoch leider nicht für das geplante Vorhaben verwenden. Der mitgelieferte Treiber wird daher durch Bearbeitung mit einem Editor deaktiviert.

Die folgenden drei Zeilen müssen in der Datei /etc/modprobe.d/raspi-black-
list.conf eingetragen und abgespeichert werden.

blacklist dvb_usb_rtl28xxu
blacklist rtl_2832
blacklist rtl_2830

Bevor der neue Treiber verwendet werden kann, muss zuerst der alte Treiber entfernt werden. Dies erfolgt mit diesem Kommando:

sudo rmmod dvb_usb_rtl28xxu

Sofern hier eine Fehlermeldung erscheint, war der alte Treiber nicht geladen. Die Meldung kann ignoriert werden. Die aktuellen Treiber laden wir direkt aus dem Repository der Entwickler. Anschließend werden die Pakete kompiliert. Dazu müssen die folgenden Kommandos in der Befehlszeile eingegeben werden.

cd ~/src
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build 
cd build cmake ../ -DDETACH_KERNEL_DRIVER=ON -DINSTALL_UDEV_RULES=ON 
make 
sudo make install
sudo ldconfig

Das Kompilieren sollte erfolgreich durchlaufen, wenn die obigen Schritte alle korrekt ausgeführt worden sind. Zum Testen des Sticks und der Bestimmung der möglichen Werte für die Verstärkung (gain) kann der Befehl rtl_test ausführt werden. Wenn die Ausgabe von rtl_test fehlerfrei ist, dann passt alles.

Wenn sich der Befehl rtl_test nicht ohne Root-Rechte, also ohne sudo davor ausführen lässt, dann müssen noch die udev-Regeln installiert werden. Dazu geben wir den Befehl lsub ein und suchen in der Ausgabe nach unserem DVB-T Stick.

pi@raspberrypi:~/src/openwebrx $ lsusb
Bus 001 Device 005: ID 0bda:2838 Real-
tek Semiconductor Corp. RTL2838 DVB-T

In der Ausgabe befindet sich die Hersteller- sowie die Produkt-ID des von mir verwendeten Sticks. Bitte die zum eigenen Stick ermittelten IDs nach folgendem Schema in die Datei /etc/udev/rules.d/rtl-sdr.rules eintragen.

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666"

Installation von OpenWebRX Im nächsten Schritt wird OpenWebRX installiert und konfiguriert. Da OpenWebRX auf die Bibliothek libcsdr zurückgreift, muss diese vorher kompiliert und installiert werden. Zunächst mittels cd ~/src wieder in das Arbeitsverzeichnis wechseln. Anschließend wird libcsdr mit den nachfolgenden Kommandos heruntergeladen und kompiliert.

git clone https://github.com/simonyiszk/openwebrx.git
git clone https://github.com/simonyiszk/csdr.git
cd csdr
make
sudo make install

Konfiguration von OpenWebRX

Nachdem OpenWebRX installiert wurde, muss es konfiguriert werden. Die Konfiguration erfolgt in der Textdatei config_webrx.py.

nano ../openwebrx/config_webrx.py

Die Konfigurationsdatei selbst ist umfangreich und ausführlich kommentiert. In der Sektion Serversettings sollte mindestens die Einstellung max_clients auf einen kleineren Wert reduziert werden. Dort wird festgelegt wieviele Nutzer sich gleichzeitig auf die Weboberfläche verbinden dürfen. In den Zeilen 43-58 sind weitere Einstellungen erforderlich, um das Web-SDR an die eigenen Bedürfnisse anzupassen. Dort werden dann Rufzeichen, Standort, Locator, Höhe, Antenne und Empfänger eingetragen.
Außerdem können die Geo-Koordinaten dort hinterlegt werden. Auf der Weboberfläche wird später ein Bild der Region angezeigt. Die Bildhöhe und die Beschreibung des Bildes wird auch in diesen Zeilen konfiguriert. Die Bilddatei kann mittels WinSCP auf den Raspberry Pi übertragen werden. Sie wird unter dem Dateinamen openwebrx-top-photo.jpg im Pfad /home/pi/src/openwebrx/htdocs abgelegt.

In der Sektion DSP/RX settings werden Einstellungen zum SDR hinterlegt. Wichtig ist unter anderem die Mittenfrequenz (center_freq) auf die der Empfänger fest
eingestellt wird. Auch die Samplerate, die Frequenzkorrektur und die Verstärkung kann hier nach den Erfordernissen konfiguriert werden.
Die Konfigurationsdatei ist bereits für DVB-T Sticks vorbereitet. Gestartet wird OpenWebRX mit dem folgenden Befehl.

/home/pi/src/openwebrx/openwebrx.py

Der Webserver den OpenWebRX bereitstellt hört auf der Netzwerkadresse des Raspberry Pi. Mittels Browser kann nun auf das Webinterface unseres SDR zugegriffen werden. Dazu muss die IP-Adresse des Raspberry Pi in der Adresseleiste, gefolgt von einem Doppelpunkt und der dem Port 8073 eingegeben werden.

WebSDR mit anderen teilen

In Kombination mit einem dynamischen DNS-Dienst oder einer dauerhaften festen öffentlichen IP-Adresse kann der OpenWebRX natürlich auch mit Freunden aus dem OV geteilt werden. Dazu muss jedoch eine Portweiterleitung am Router eingerichtet werden. Wer sein OpenWebRX öffentlich über www.sdr.hu teilen möchte, der kann sich auf der Seite www.sdr.hu/register registrieren, um einen eindeutigen Schlüssel zur Identifizierung des SDRs zu bekommen. Dieser kann dann in der Konfigurationsdatei im Bereich sdr.hu listing eingetragen werden.

sdrhu_key = "xxxxxxxxxxxxxxxxx"
sdrhu_public_listing = True

Das schwächste Glied in dieser Konfiguration ist der DVB-T Stick als Empfänger, doch diese Komponente ist verbesserungsfähig oder kann ausgetauscht werden. Das Beispiel macht deutlich was mitttels SDR, kleinen Computern und Vernetzung via Internet oder HAMNET möglich ist.

Ich arbeite in einem IT-Systemhaus und bin überwiegend mit der Administration von Mail-Servern beschäftigt. Derzeit beschäftige mich viel mit VHF/UHF, APRS und HAMNET. Darüber hinaus sammle ich Erfahrungen im Antennenbau.

15 Kommentare zu “OpenWebRX auf einem Raspberry Pi

  1. Marcus, dc5dm

    Hallo Silvio, ein schöner, informativer Beitrag.
    Werde das mal testen, wenn ich Zeit habe 😉
    Im Link zum OpenWebRX-Wiki ist ein Leerzeichen enthalten, so das er auf Gihub zu einem 404-Fehler führt. Und mit “Gegenkoordinaten” sind Geo-Koordinaten gemeint, oder?
    mni 73
    Marcus, dc5dm

  2. Hallo zusammen,

    bei unseren Projekten wir haben wir recht gute Erfahrungen mit SDR-Sticks gemacht die über einen TCXO verfügen (z.B. die Sticks von NooElec wie NESDR Mini2+, Nano2+ oder Smart). Eine Kalibrierung ist damit meistens nicht mehr erforderlich. Zudem sind diese Sticks deutlich temperaturstabiler als herkömmliche SDR-Sticks ohne TCXO.

    Schönen Gruß
    Frank, DL3DCW

  3. Pingback: OpenWebRX auf einem Raspberry Pi – dxradio.de

  4. Kai - do9kai

    Ich glaube es gibt da ein kleinen Fehler in der Dokumentation. Die Zeile:
    cd build cmake ../ -DDETACH_KERNEL_DRIVER=ON -DINSTALL_UDEV_RULES=ON
    funktioniert so nicht wirklich 😉 Ansonsten lässt sich das wirklich gut nachbauen anhand der Dokumentation.

    Leider aber hat mich openwebrx überhaupt nicht überzeugt.

    Gründe:
    1. Es wird nur Google Chrome als Browser unterstützt. Das wird wahrscheinlich irgendwelche technischen Gründe haben, die aber scheinbar nirgends erläutert sind. Wer (wie ich z.B.) einen anderen Browser nutzt, hat entweder Pech gehabt, oder muss sich einen zweiten Browser installieren (mag für den ein oder anderen Banal klingen, ich finde das trotzdem äusserst unschön!)

    2. Das Wiki auf Github ist bei Problemen nicht wirklich hilfreich.

    3. Es gibt wohl ein Supportforum (Mailingliste genannt). Allerdings nur als geschlossene Benutzergruppe auf Google Groups. Wer aus welchen Gründen auch immer es vorzieht kein Google User sein zu wollen, der hat eben Pech gehabt.

    Ich habe (Stand: 14.03.2014) jedenfalls keine brauchbare Instanz hinbekommen. Jeder Aufruf (mit dem gewünschten Browser) führt dazu, das erstmal kein Wasserfall kommt. Nach gefühlt 2 Minuten, kommt dann doch dieser Wasserfall (in einem rasenden Tempo) und im LOG ist zu sehen: fft overflow bis dann letztendlich ein WebSocket has closed unexpectedly. Please reload the page. erscheint. Ein reload der Page lässt das Spiel nur von vorne beginnen.

    Ich werde nun ein paar Tage noch schauen, ob per git pull evtl. Updates kommen, ansonsten werde ich den Pi einer anderen Funktion zu kommen lassen.

    • Kai - do9kai

      Aber was ich als Ergänzung dazu sagen muss:

      Der Entwickler antwortet wenigstens auf Anfragen in der Group und es scheint ein Programmfehler zu sein, denn er sich in den nächsten Tagen anschauen will. (Wollte ich noch mitteilen! Fairplay muss sein)

      • Kai - do9kai

        OK, nach einem erneuten git pull läuft nun auch openwebrx bei mir.

        Als Ergänzung vielleicht noch ein Link wie man seine Frequenzkorrektur (ppm) ermittelt: https://github.com/simonyiszk/openwebrx/wiki/Correcting-the-frequency-offset

        Das ganze scheint aber recht Clientlastig zu sein. Ich habe zum ersten mal auf meinem Macbook Air (den ich Mitte 2013 gekauft habe und täglich mehrere Stunden im Betrieb habe) festgestellt, das es einen eingebauten Lüfter gibt.

        • Marcus, dc5dm

          Ah ok, ich hatte schon bedenken, da ich beides – Server und Client – am Laptop getestet hatte, ob der Raspi das kann.

          • Kai - do9kai

            Der Raspi kann das, allerdings eine Samplerate von 1 Mhz ist dann schon das Maximum. Bei mehr geht die CPU Last auf dem Raspi sehr hoch, und es kommt sehr Häufig zu Audio Buffer Underrun.

            Ich habe mal zu Testzwecken die PMR Frequenzen laufen lassen. Das geht ganz gut mit der Samplerate. Erstaunlich, neben den Nachbarskindern hört man doch auch oft Leute die dann auch noch erzählen das sie 25 KM weit weg sind … und das mit 500mW 😉

        • Kai - do9kai

          Noch ein Hinweis zu openwebrx-top-photo.jpg
          Der korrekte Path lautet /home/pi/src/openwebrx/htdocs/gfx/

  5. Hi zusammen,

    wie kann ich den die Bandauswahl konfigurieren?
    Auf der sdr.hu Seite kann ich bei jedem Empfänger oben rechts die Bänder auswählen.

    Gruß Markus

  6. Hallo,

    tolle Anleitung, ich bin auch bis zum Schluss durchgekommen, allerdings zeigen die Browser beim Aufruf nur

    Error response
    404
    message response: Invalid path

    Ich habe einen Raspi3 und einen RTL DVB-T-Stick, in der Kommandozeile werden die anfragenden PCs auch angezeigt:

    client 0x1ab31f0: CS_THREAD_FINISHED, client_goto_source = 2, errno = 32127.0.0.1 – – [23/Jul/2017 13:35:07] code 404, message Invalid path.
    127.0.0.1 – – [23/Jul/2017 13:35:07] “GET / HTTP/1.1” 404 –
    127.0.0.1 – – [23/Jul/2017 13:35:07] code 404, message Invalid path.
    127.0.0.1 – – [23/Jul/2017 13:35:07] “GET /favicon.ico HTTP/1.1” 404 –

    Hast Du eine Idee ?

    Danke

    Hubert

  7. Kellerfunker

    Hallo zusammen,

    habe leider das gleiche Problem wie Hubert. Sobald ich eine andere IP anstelle von “localhost” einsetze, bekomme ich beim Zugriffsversuch nur die Error 404-Meldung angezeigt. Im Terminal sind die von Hubert beschriebenen Meldungen ebenfalls zu sehen. Ist das eventuell ein Kompatibilitäts-, respektive Versionsproblem (raspbian, openwebrx)?

    Viele Grüße, der Kellerfunker

  8. Die Lösung:

    ich musste die Datei folgendermassen starten:

    python2 openwebrx.py

    dann läuft es, nach ein paar Minuten ist der Pi komplett eingefroren, der Start hat aber funktioniert !

  9. Kellerfunker

    Danke, ich werde das gleich mal austesten. Bericht folgt. 🙂

Schreibe einen Kommentar

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

*

banner