Raspberry Pi 3G mit Huawei E303 und DynDNS (Deutsch, Teil 1)

English version available here!

Update: Diese Methode scheint über die Jahre irrelevant geworden zu sein da der Raspberry Pi 4 den korrekten Modus nun scheinbar von selbst erkennt!

Geschichte

Für meine Arbeit an der ferngesteuerten Drohne habe ich bereits vor langer Zeit angefangen, eine einfache Möglichkeit zu suchen, diese praktisch weltweit ansprechen und steuern zu können. Da die Reichweite und Zuverlässigkeit der Kommunikation bei dem Projekt an oberster Stelle stehen, kam mir schnell die Idee, die Kommunikation über das mobile Internet laufen zu lassen. Dieses ist doch grundsätzlich überall dort verfügbar, wo Menschen Handys benutzen. Also (fast) weltweit. Also bestellte ich mir bereits vor einem Jahr ein günstiges USB-Modem und eine passende prepaid Sim-Karte. Nun war das mit dem Modem und dem Raspberry-Pi nicht ganz so einfach, wie ich mir das am Anfang vorgestellt habe. Leider hatte ich bis zu diesem Wochenende nicht wirklich Zeit, mich dem zu widmen. Allerdings habe ich es jetzt endlich geschafft, Zeit dafür zu finden und ich möchte meine Ergebnisse mit euch teilen, da ich gesehen habe, dass doch einige Leute dieses Problem zu haben scheinen.

232380-1
Bild 1: Huawei E303 Surf-Stick

Das Problem mit dieser Hardware ist, dass sie sowohl als CD-Laufwerk (auf dem die Treiber gespeichert sind), als auch als Netzwerkkarte fungiert. Zwar erkennen viele Systeme das automatisch und schalten dann zum gewünschten Gerät um, nicht aber Raspbian/Debian (und viele andere Linux-Distributionen anscheinend auch nicht). Daher muss man das System manuell zum Umschalten zwingen.

Meine Vorgehensweise

An dieser Stelle wird angenommen, dass der Surf-Stick bereits korrekt konfiguriert wurde (Sim-Pin ausgeschaltet, korrekte Verbindungsdaten, genug Guthaben, etc.). Dass also der Stick grundsätzlich eine Verbindung herstellen kann, nur von Raspbian falsch erkannt wird.

  1. Zu Beginn habe ich ein komplett neues Image von Raspbian aufgespielt. Das sollte einfach sicherstellen, dass keine Software von Drittanbietern irgendwelche Konfigurationen stören.
  2. Auf der frischen Raspbian Installation muss nun das Programm usb-modeswitch installiert werden:
    sudo apt-get install usb-modeswitch

    Nachdem die Installation abgeschlossen wurde, hat man zwei Möglichkeiten: Es kann entweder die generelle Konfiguration von usb-modeswitch bearbeitet werden, oder eine Spezifische neu erstellt werden. Ich beziehe mich hier auf die erste Methode, da ich nur ein Gerät besitze, welches ich umschalten will. Sollte es mehrere Geräte geben, die umgeschaltet werden sollen, so kann für jedes einzelne Gerät eine Konfiguration erstellt werden.

  3. Nun muss die vom ID des Herstellers und des Gerätes ausgelesen werden.
    Mithilfe von lsusb liste ich die angeschlossenen USB-Geräte auf:

    Bus 001 Device 005: ID 12d1:1f01 Huawei Technologies Co., Ltd.Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
    Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Die Hersteller ID (In Hex) lautet: 12d1, die Produkt in (auch Hex): 1f01
    Wobei diese Produkt-ID das vorhin beschriebene CD-Laufwerk darstellt. Genau diese ID wollen wir ändern, damit das OS das Modem anspricht, und nicht das CD-Laufwerk. Und hier kommt usb-modeswitch ins Spiel.

  4. Nun geht es um die in Punkt zwei beschriebene Konfiguration. Es gibt Umschaltcodes für diverse Geräte. Die passenden Codes findet ihr unter anderem hier. Ich schreibe nun in die master Konfiguration von usb_modeswitch die folgenden Zeilen (ans Ende der Datei):
    # Huawei E303
    DefaultVendor= 0x12d1
    DefaultProduct=0x1f01
    
    TargetVendor=  0x12d1
    TargetProduct= 0x14dc
    
    MessageContent="55534243123456780000000000000a11062000000000000100000000000000"

    Hier finden sich bei den Default-Werten unsere eben ausgelesenen Werte wieder. Bei den Target-Werten ändert sich nur das Produkt, welches in diesem Fall das Modem darstellt. MessageContent ist die Umschaltsequenz, welche ich von der Herstellerseite habe. Speichert die Konfiguration ab.

  5. Nun führt ihr usb_modeswitch mit den selben Paramtern aus. Ich weiß ihr denkt jetzt, dass der Schritt Nummer vier unnötig war, da die selben Werte nun als Parameter übergeben werden. Allerdings bekam ich des öfteren Fehlermeldungen, dass die Konfiguration nicht gefunden wurde. Um auf Nummer sicher zu gehen, habe ich diese einfach bearbeitet. Außerdem dient die Standard-Konfiguration dem automatischen Umschalten, sobald das Gerät eingesteckt wird.
    sudo usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000a11062000000000000100000000000000'

    Nachdem ihr den Befehl ausgeführt habt, ruft lsusb auf. Das gerät sollte nun wie folgt gelistet werden:

    Bus 001 Device 005: ID 12d1:1fdc Huawei Technologies Co., Ltd.Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
    Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Ihr erkennt, dass die ID verändert wurde. Hat das funktioniert, sollte das Modem auch als eigene Netzwerkkarte auftauchen, sobald ihr ifconfig aufruft. Es sollte als eth1 eingetragen werden. Außerdem leuchtet die LED auf dem Surf-Stick nach dem erfolgten Verbindungsaufbau Türkis, anstatt wie zuvor blau blinkend.

  6. Hat der Vorgang bis dahin funktioniert, wird er auch die nächsten Male funktionieren. Ich habe mir (zur Sicherheit, da sich der Stick ab und an von selbst neu Konfiguriert) allerdings im root Verzeichnis ein Skript erstellt und die folgende Zeile in das Skript geschrieben (Achtet darauf, dass ich den vollen Pfad zu usb_modeswitch angegeben habe, da das Programm ansonsten direkt nach dem Neustart nicht gefunden wurde):
    /usr/sbin/usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000a11062000000000000100000000000000'

    Nun habe ich einen cron-Eintrag in die cron-Tabelle des super users gemacht:

    * * * * * sh /modeswitch.sh
    @reboot sleep 60 && sh /modeswitch.sh

    Dieser cron-Eintrag führt das modeswitch-Skript jede Minute und eine Minute nach einem Neustart aus. Das habe ich gemacht, da sich das Gerät ab und an selbst zu verstellen versucht.
    Allerdings sollte usb_modeswitch jedes Mal automatisch die ID ändern, wenn das in der Konfigurations-Datei angegebene Gerät angesteckt wird.

  7. Nun startet ihr das System neu und wartet, bis usb_modeswitch die ID umgeschaltet hat. Das kann etwas dauern. Die ID sollte sich aber dennoch relativ rasch ändern und es sollte nicht länger als eine Minute brauchen. Bei mir ist die ID in den meisten Fällen nach 20-30s nach dem reboot aktualisiert worden, was daran liegt, dass usb_modeswitch das konfigurierte Gerät von selbst umschaltet. Das Skript dient nur dafür, dass usb_modeswitch jede Minute prüft, ob sich der Stick von selbst neu konfiguriert hat.
  8. Ist nach dem Neustart die ID immer noch richtig, so könnt ihr eure Verbindung nun testen. Am besten geht das im Terminal mit:
    ping 8.8.8.8

    Dadurch prüft ihr, ob der Google DNS-Server verfügbar ist und ob ihr in erreichen könnt.

Aktuelle Probleme

Aktuell habe ich nur das Problem, dass der Raspberry-Pi trotz intakter Verbindung von außen nicht erreicht werden kann. Das liegt mit hoher Wahrscheinlichkeit daran, dass der Huawei E303 als eigener Router fungiert und keine Verbindungen von außen weiterleitet. Allerdings habe ich noch keine Möglichkeit gefunden (die bei mir funktioniert), um eine Port-Weiterleitungen zu aktivieren.

Update: Ich habe ein anderes USB-Modem von Huawei (genauer gesagt das Huawei E355) bestellt, welches die Port Weiterleitung unterstützen soll. Sobald es bei mir angekommen ist, werde ich darüber berichten!

Update2: Das Modem ist angekommen und ist ein kleiner Router, der über USB mit Strom versorgt wird. Dadurch kann eine Port-Weiterleitung aktiviert werden. Wenn ihr darüber mehr wissen wollt, lasst einen Kommentar da und ich werde gerne alle Fragen dazu beantworten!

Wie geht’s weiter?

Mit DynDNS. Dazu allerdings mehr in Teil 2!

Linksammlung

Umschaltcodes für die von usb-modeswitch sicher unterstützten Geräte
http://www.draisberghof.de/usb_modeswitch/device_reference.txt

Quellen

Bild 1: http://consumer.huawei.com

8 thoughts on “Raspberry Pi 3G mit Huawei E303 und DynDNS (Deutsch, Teil 1)

    1. Hi!
      Hab am Ende das Huawei E355 genommen, war zwar ziemlich schwer zu finden, vor allem ohne Sim-Lock, aber auf eBay oder so finden sich immer mal wieder Angebote zu einem vernünftigen Preis. Hab meins für ca 25€ mit Versand bekommen.

      Like

  1. Ganz OK der Beitrag. Aber es war ja auch dein Erster 😉 Bleib dran, ich bin mir sicher dass sich ne Menge Leute über die Artikel freuen. Mir gefallen sie. Vielleicht solltest du auch Videos machen, denn die Texte sind irgendwie lang…

    Liked by 1 person

    1. Ja ich schreibe gerne ausführlich 😀
      Jedenfalls hast du recht, das mit dem YT channel hab ich mir auch schon überlegt (Aktuell habe ich ein paar videos auf meinem eigenen channel hochgeladen). Mal sehen, was daraus wird!

      Like

Leave your two cents, comment here!

This site uses Akismet to reduce spam. Learn how your comment data is processed.