Prawie jak stacja testowa

Były święta i wolne. W planach miałem uruchomienie stacji testowej w domu, na Raspberry Pi, ale po namyśle stwierdziłem, że jednak wolę zamienić Banana Pi, robiące aktualnie za router u rodziców z moim Raspberry Pi i testować na BPi. Przy okazji miałem nadzieję wyjaśnić zagadkę niedziałającego z BPi zasilacza domowej produkcji, który świetnie działa z RPi. Podejrzewam kabel USB, ale o tym innym razem.

W każdym razie spakowałem RPi z zainstalowanym podstawowym systemem i dostępem po SSH, wziąłem też sporo kabli USB, zasilacze, mirniki napięcia. Ot, wszystkie okoliczne graty. Wziąłem też testowy modem Huawei E3131, na wypadek gdyby przyszło mi do głowy zastąpienie istniejącego, również Huawei E3131 tyle, że starszej generacji, bez hilink.

Na miejscu dokonałem szybkiego kopiowania skryptów i… przyszedł mi do głowy szatański plan. Przecież mogę uruchomić oba modemy w RPi i testować w warunkach produkcyjnych. Tyle, że zdalnie. Niestety, szybko okazało się, że mimo starannego choć szybkiego skopiowania skryptów RPI nie nawiązuje łączności ze światem. Wielkiej filozofii w skryptach nie ma, prawa identyczne. Stary Huawei nie chce działać. Wetknąłem więc nowy modem, z hilink i stwierdziłem, że w sumie najwyżej zostanie RPi z nowym modemem robiące za router, a BPi przetestuję po powrocie do domu i od razu zrobię z niego stację roboczą. Tyle, że okazało się, że modem z hilink niby nawiązuje połączenie (jest ustawiony, by robił to automagicznie), przynajmniej wskazuje na to kolor diody ale… w systemie nie powstaje interfejs. Czyli żaden z dwóch modemów na USB nie zadziałał na RPi!

Lekko tylko klnąc pod nosem szybko wróciłem do działającej konfiguracji z Banana Pi robiącym za router GSM, czyli zupełnie do punktu wyjścia, bez jakichkolwiek postępów – ani nie mam uruchomionej stacji testowej, ani nie zluzowałem BPi w celu przetestowania zasilacza.

Jednak są pewne… zmiany, bo ciężko to nazwać postępem:

  • Mam zagadkę pt. „na Raspbianie nie działają modemy USB”. Jak patrzę we wcześniejszy wpis o SSH, to jakiś Raspbian Lite. Może to jest przyczyną? Może customowy kernel Raspbiana? Przetestuję w chwili wolnej.
  • Jakimś cudem zadziałało zapięcie Banana Pi zarówno jako źródła danych, jak i „klienta” w hubie USB. Jak ostatnio sprawdzałem, to w tej konfiguracji się nie uruchamiał, a RPi działało bez problemu. Zastanawiam się, czy znowu nie chodzi o kabel.
  • Kolejnym zaskoczeniem jest to, że Raspberry Pi nie musi być wpięte w ww. sposób do huba USB, by działało. Okazało się, że wystarczy je zapiąć jako źródło danych i… dostaje zasilanie. Jest to dla mnie totalną zagadką, bo do tej pory nie przyszło mi do głowy, ale działa. W sumie fajne, bo mam jeden port w hubie USB więcej wolny.

Czyli w DSP2017 zastój, ale czegoś nowego się dowiedziałem i jest co robić. Następny wpis raczej również będzie metatematyczny, prawdopodobnie znowu o ciekawych projektach w DSP2017. Z rzeczy związanych bardziej bezpośrednio – prawdopodobnie w przyszłym tygodniu jakąś stację testową jednak uruchomię. Mam nadzieję, że będzie to RPi z rozwiązaną zagadką modemów USB…

Huawei E353/E3131 w Debianie

Kiedyś opisywałem uruchomienie Aero2 z modemem Huawei E3131. Kupiłem „taki sam” model i dziś przyszedł. Po podłączeniu do komputera spodziewałem się, że będzie tak samo, jak w poprzednim. Tak się nie stało, więc może komuś oszczędzę walki, na którą straciłem dziś dobry kwadrans, jak nie lepiej. Huawei E353/E3131 różni się od poprzednio opisywanego.

Otóż nowy modem przedstawia się w lsusb:

Bus 002 Device 016: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131

Natomiast po wpięciu Huawei E353/E3131 do portu USB w dmesg widać:

[11264.677637] usb 2-1.2: new high-speed USB device number 15 using ehci-pci
[11264.787001] usb 2-1.2: New USB device found, idVendor=12d1, idProduct=1f01
[11264.787005] usb 2-1.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[11264.787007] usb 2-1.2: Product: HUAWEI HiLink
[11264.787009] usb 2-1.2: Manufacturer: HUAWEI
[11264.788426] usb-storage 2-1.2:1.0: USB Mass Storage device detected
[11264.788583] scsi host6: usb-storage 2-1.2:1.0
[11265.736276] usb 2-1.2: USB disconnect, device number 15
[11268.517690] usb 2-1.2: new high-speed USB device number 16 using ehci-pci
[11268.627263] usb 2-1.2: New USB device found, idVendor=12d1, idProduct=14db
[11268.627267] usb 2-1.2: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[11268.627269] usb 2-1.2: Product: HUAWEI HiLink
[11268.627271] usb 2-1.2: Manufacturer: HUAWEI
[11268.630336] cdc_ether 2-1.2:1.0 eth0: register 'cdc_ether' at usb-0000:00:1d.0-1.2, CDC Ethernet Device, 58:2c:80:XX:XX:XX
[11268.707401] cdc_ether 2-1.2:1.0 enx582c80xxxxxx: renamed from eth0

Co prawda świtało mi coś o hilink i zauważyłem kartę sieciową w systemie. Jednak stwierdziłem, że to tylko jeden z trybów i można używać „po staremu” z /dev/ttyUSB0 i wvdial, który to sposób mam obcykany. Zmyliło mnie też to, że nie mogłem wejść na wskazywany przy opisach wersji hilink adres 192.168.1.1.

Robiłem różne cuda, o których pisać nie będę. Na szczęście zapytałem na IRCu i dobrzy ludzie naprowadzili me zawiłe rozumowania na proste tory.

No więc ostatecznie „po staremu” mi się nie udało, natomiast żeby uzyskać adres IP wystarczy wydać polecenie:

dhclient enx582c80xxxxxx

I wtedy po wpisaniu w przeglądarkę 192.168.1.1 mamy dostęp do klikalnego interfejsu zarządzania modemem i wszystko działa od kopa.

Niestety, opisy są chyba obliczone albo na ludzi, którzy robią wszystko z ręki, albo na tych, którzy mają wszystko automatycznie. Pobieranie IP z DHCP też.

Międzyczas

Zacząłem od opisu założeń i tym podobnych rzeczy nie związanych bezpośrednio z programowaniem, ale ciągnie wilka do lasu i chciałem się w międzyczasie na boku pobawić fragmentami kodu i modułami. Ponieważ już w komentarzach w poprzednim wpisie pojawiły się wzmianki o tym co będzie, nie będzie wielkiej szkody czy niespodzianki, jeśli nieco wybiegnę naprzód.

Na pierwszy ogień poszło pingowanie, bo właśnie w ten sposób chcę mierzyć jakość łącza. Jak można się spodziewać, do korzystania z ICMP wymagane są uprawnienia użytkownika root. Nie jest to dla mnie niespodzianką, bo spotkałem się z tym przy perlowym skrypcie do powiadamiania o konieczności wpisania CAPTCHA dla Aero2. Tym razem postanowiłem nie odpuścić, tym bardziej że w sumie dopuszczam – przynajmniej w pierwszej wersji – uruchamianie skryptu z użytkownika root. W końcu i tak będzie trzeba dotykać routingu, a do tego potrzebne są wyższe uprawnienia niż posiadają zwykli użytkownicy.

Żeby poznać najlepszy i zalecany sposób pingowania, wrzuciłem zapytanie do wyszukiwarki i… włos mi się zjeżył na głowie. Rozwiązań jest wiele, modułów jest wiele, a prostego i działającego jakoś nie widać. Zacząłem od prostego modułu ping, który ma funkcję quiet_ping robiącą to, co potrzebuję, ale o ile dał się bez problemu zainstalować z Python 2, o tyle z Python 3 ma problem:

virtualenv --python=python3 test
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /tmp/abcc3/test/bin/python3
Also creating executable in /tmp/abcc3/test/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
source test/bin/activate
pip3 install ping
Collecting ping
  Using cached ping-0.2.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "", line 1, in
      File "/tmp/pip-build-qqotvnqc/ping/setup.py", line 23, in
        from ping import __version__
      File "/tmp/pip-build-qqotvnqc/ping/ping.py", line 196
        except socket.error, (errno, msg):
                           ^
    SyntaxError: invalid syntax
   
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-qqotvnqc/ping/

Z kolei próba użycia modułu python3-ping wygląda tak:

pip3 install python3-ping
Collecting python3-ping
  Could not find a version that satisfies the requirement python3-ping (from versions: 2014.05.01.022aa83, 2014.05.02.805ee25, 2014.05.02.16245f0)
No matching distribution found for python3-ping

Wgląda więc, że prawdopodobnie w pierwszym etapie, by nie tracić czasu, pozostanę przy Python 2, zachowując zgodność z Python 3, a najwyżej później dostosuję całość. Nie powinno być to trudne – wystarczy wymienić moduł i jego wywołanie, funkcje u mnie i argumenty raczej się nie zmienią. Będę wdzięczny za sugestię działającego modułu do pingowania. Oczywiście zawsze zostaje użycie systemowego polecenia ping i parsowanie wyjścia, ale tego wolałbym uniknąć…

Z innych newsów okołoprojektowych: zakupiłem modem GSM, żeby mieć na czym testować. Jest wbudowana karta w lapka, mam jakieś wifi na USB, dorzucę modem i wygląda, że nawet do pięciu łącz jestem w stanie w środowisku testowym mieć. Pewnie zostanę przy dwóch-trzech, ale dobrze jest mieć perspektywy. 😉