Linux^2

Linux^2

What you may find here

In this blog you'll mainly find all things Linux - problems, solutions, reports, rants, tips & tricks etc. with the occasional off-topic entry thrown in. You never would have guessed looking at the URL, huh?
In diesem Blog findet ihr hauptsächlich Themen rund um Linux - Probleme, Lösungen, Berichte, Meinungen, Tips & Tricks und dazwischen ein paar überhaupt nicht dazu passende Einträge. Wärt ihr bei der URL nie drauf gekommen, ne?

Mailt mal! Email me!

Weiterentwicklung...

gsm-ussdPosted by Jochen Tue, June 01, 2010 16:44:26
Selbst kleine Skripte werden, wenn man sie in die große weite Welt entlässt, mit der Zeit ziemlich groß. Mit zur Zeit über 1500 Zeilen ist gsm-ussd für das, was es kann, eigentlich nicht besonders groß, aber es wird mir langsam etwas unübersichtlich. Das mag auch an meinem eigenen Unvermögen liegen, ist aber grundsätzlich ein paar Designentscheidungen geschuldet. Den meisten davon war ich mir zu Beginn noch nicht mal bewußt, bin ihnen aber trotzdem gefolgt:

  • Möglichst wenig externe Abhängigkeiten
  • Möglichst eine einzelne Datei
  • Möglichst keine Konfiguration
  • Einfache Installation

An Abhängigkeiten ist - außer perl als Skriptsprache - nur noch Expect.pm dabei, welches in den mir bekannten (großen) Distributionen im Repository steckt. Zu Beginn verwendete ich beispielsweise noch Log::Log4Perl, habe dies aber durch eine eigene kleine DEBUG()-Funktion ersetzt. Ansonsten kann gsm-ussd als einzelne Datei an beliebiger Stelle im Verzeichnisbaumk stehen und wird funktionieren. Eine Konfigurationsdatei existiert nicht. Zur Installation stehen zusätzlich ein RPM und ein DEB Paket parat.

Diese Entscheidungen bringen aber auch Probleme mit sich.
  • Testen wird schwieriger
  • Wiederverwendung wird schwieriger
  • Weniger Flexibilität in der Entwicklung

Änderungen an bestehendem Code sind schwerer zu testen, ob sie Regressionen verursachen. Ideen eigene Programme für SMS-Versand/Empfang (gsm-sms) oder ein reines PIN/PUK-Setz-Programm (gsm-pin) wären auf der bestehenden Basis nicht schwer zu erstellen, würden aber duplizierten Code und damit erhöhten Pflegeaufwand bedeuten.

Kurz: Der ursprüngliche Ansatz war korrekt für ein einfaches, kleines Skript, wie gsm-ussd auch begonnen hat. Mittlerweise passen sie aber nicht mehr.

Meine Konsequenzen:
  • Der 0.3er Zweig von gsm-ussd wird erhalten bleiben, aber nur noch reinem Bugfixing vorbehalten sein. Im git-Repository wird das der Branch "v0.3" sein.
  • In der weiteren Entwicklung werde ich den Code wesentlich stärker modularisieren und objektorientiert designen. Der Entwicklung kann im git-Repository im Zweig "dev" gefolgt werden. Intern wird dieser Zweig 0.4er Versionsnummern bekommen.
  • Hat der neue Code dann eine gewisse Stabilität gewonnen, wird er in einem Schlag zum Master übernommen und dann unter der Versionsnummer 0.5.x weitergeführt werden.

Solltet ihr also in nächster Zeit keine großen Ankündigungen zu gsm-ussd auf freshmeat.net oder so finden, keine Bange. Die Entwicklung stoppt nicht, sondern konzentriert sich erst mal auf eine solide Basis für weitere Ideen.

gsm-ussd 0.3.2 - Nicer behaviour!

gsm-ussdPosted by Jochen Tue, June 01, 2010 07:55:14


v0.3.2 is out.

Two distinct changes went into gsm-ussd..

First: After entering the PIN, the modem first has to register in its net. gsm-ussd waits for that and only proceeds if the modem reports a successful registration, but some modems are a bit too optimistic. They might be freshly registered, but USSD queries still time out. Now, gsm-ussd waits for another turn if the modem just registered to give it time so settle, so that USSD queries can succeed.

Second: If several programs are using one and the same serial interface, the data coming from the modem get corrupted. After all, a serial interface is a point-to-point connection; having more than the modem and one program on the interface has to break. In Linux, access to serial interface is regulated by lock files saved in /var/lock. Sadly, up to now gsm-ussd did not adhere to this convention, so if there was still a picocom running (for debugging purposes), both stepped over each other, ruining everything in the progress. This bug is done now, gsm-ussd will create lock files or quit if one already exists.

Here the new files for download:

http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.3.2-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0_all.deb

And an overview about all downloadable versions :
http://linux.zum-quadrat.de/downloads/index.html.

The public git repository can be found at
http://github.com/JochenHoch2/gsm-ussd.git
or
git://github.com/JochenHoch2/gsm-ussd.git

Have fun,
Jochen

gsm-ussd 0.3.2 - Netteres Verhalten!

gsm-ussdPosted by Jochen Tue, June 01, 2010 07:43:59

v0.3.2 ist raus.

Zwei konkrete Neuerungen sind in gsm-ussd eingeflossen.

Die direkt Bemerkbare: Wenn man gsm-ussd mit Option "--pin X" startet, muss sich das Modem nach erfolgreicher Freischaltung erst im nächsten verfügbaren/gewünschten Netz registrieren. Seit einigen Versionen wartet gsm-ussd da auch geduldig ab - aber nicht geduldig genug. Wie die Erfahrung zeigt, schlagen sofort nach erfolgreicher Registrierung abgesetzte USSD-Abfragen gerne fehl. Daher legt gsm-ussd, wenn die Registrierungsprüfung mindestens einmal fehlgeschlagen ist, bei erfolgreicher Prüfung noch eine kleine Ehrenrunde ein, bevor es fortfährt. Das Modem bekommt so Zeit, sich ans Netz anzukuscheln (oder umgekehrt?) und die Abfragen funktionieren dann auch.

Die nur indirekt Bemerkbare: Arbeiten mehrere Programme gleichzeitig mit einer seriellen Schnittstelle, kommt es zu Problemen. Ist ja eigentlich auch schon vom Namen her logisch: Eine serielle Verbindung ist immer eine Punkt-zu-Punkt-Verbindung. Was erwartet man also, wenn es außer Modem und gsm-ussd einen weiteren Endpunkt wie beispielsweise picocom gibt? Korrekt: Datensalat. :)
Das Problem war allerdings nicht picocom, sondern gsm-ussd. Es ist Konvention, bei Zugriff auf eine serielle Schnitstelle unter /var/lock Lockfiles dazu anzulegen. gsm-ussd hält sich jetzt an die Konvention, so dass sich picocom und gsm-ussd nicht mehr gegenseitig auf die Zehen steigen.

Hier die Dateien zum Download:

http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.3.2-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0_all.deb

Einen Überblick über alle gsm-ussd bezogenen Downloads sind hier:
http://linux.zum-quadrat.de/downloads/index.html.

Und das komplette git-Repository findet sich unter
http://github.com/JochenHoch2/gsm-ussd.git
oder
git://github.com/JochenHoch2/gsm-ussd.git

Viel Spaß damit und sagt Bescheid, wenn ich was kaputtgemacht habe,
Jochen

USSD Sessions: Ja, aber...

gsm-ussdPosted by Jochen Fri, May 28, 2010 13:35:11
OK, seit Version 0.3.0 unterstützt gsm-ussd also USSD Sessions. Wie schon erwähnt, sind USSD Sessions ein Mittel, vom Anwender weitere Daten abzufragen. Das kann ein Cashcode sein, um die Karte wieder aufzuladen, aber häufig sind es einfache Menüs, von denen man dann einen Eintrag auswählen soll. Als Beispiel eine Sitzung bei Tchibo Mobile (O2-Reseller):

$ gsm-ussd '*100#'
USSD session open, to cancel use "gsm-ussd -c".
Tchibo mobil Servicemenü:
1 Kontoabfrage
2 Guthaben-Verfügbarkeit
3 Aufladung Guthabenkarte
4 Optionsmanager
$

Die erste Zeile in der Ausgabe (USSD session open, ...) wird nach STDERR geschrieben und stammt von gsm-ussd selbst. Der Rest der Ausgabe ist die USSD-Antwort. Weitere USSD-Abfragen funktionieren wegen der geöffneten Session nun nicht wie gewohnt, sondern es werden nur die o.a. Ziffern akzeptiert:

$ gsm-ussd 4
USSD session open, to cancel use "gsm-ussd -c".
Optionsmanager

1 Optionsstatus
2 Option buchen

$ gsm-ussd 2
USSD session open, to cancel use "gsm-ussd -c".
Folgende Optionen sind für Sie buchbar

1 Festnetz-Flatrate
2 Tchibofon-Flatrate
3 100 Minuten-Option
4 50 Minuten-Option
5 weitere
0 Abbruch

$ gsm-ussd 5
No answer for 20 seconds!
$

Nanu? Das ist unerwartet. Nun ja, dann brechen wir die Session eben ab:

$ gsm-ussd -c
No USSD session to cancel.
$

Hm, die Session war schon weg. Um dem Fehler auf die Spur zu kommen, habe ich die SIM dann doch mal in ein Handy gesteckt und die USSD Session per Handy bis zu diesem Punkt verfolgt. Ergebnis: "Netzwerkfehler".

Die gute Nachricht lautet also, dass gsm-ussd im Rahmen seines Designs funktioniert. Die schlechte dagegen ist, dass die USSD-Anwendungen, die die Provider anbieten, nicht unbedingt fehlerfrei sind! Ein anderer gsm-ussd-Anwender hat das Original-O2-Menü durchforstet und ist ebenfalls auf nicht korrekt aufrufbare Menüpunkte gestoßen. Mangels Handy mit funktionierender USSD-Session-Unterstützung (!) konnte er dies aber leider nicht weiter nachvollziehen.

Daraus ergibt sich allerdings ein Bild:

  • Viele Handys haben keine, eine fehlerhafte oder schlechte USS-Session-Unterstützung.
  • Die wenigen USSD-Anwendungen werden nicht viel benutzt (und scheinbar auch nicht bzw. nicht ausreichend getestet).
  • Fehler bleiben unentdeckt.
  • Wegen der Fehler benutzen auch diejenigen die USSD-Anwendungen nicht mehr, bei denen es ginge.
  • Noch weniger Anwender...
  • Bugfixing der Anwendung lohnt sich für den Anbieter nicht.

Zumindest ist das meine Interpretation der Dinge. Wenn ihr also ein Problem mit gsm-ussd und USSD-Sessions habt, dann schaut mal, ob ihr das nicht auch per Handy nachvollziehen könnt!

gsm-ussd 0.3.1, denn weniger ist mehr!

gsm-ussdPosted by Jochen Tue, May 25, 2010 19:48:05
Es ist schon wieder soweit: v0.3.1 ist raus.

Sichtbare Änderungen gibt es an xussd. Seit gsm-ussd Unterstützung für USSD-Sitzungen anbietet, hing xussd da etwas hinterher. Damit ist jetzt Schluß: Seit diesem Release kann xussd ebenfalls mit USSD Sessions umgehen - irgendwie. Nach dem Resultat der Abfrage springt xussd wieder zur USSD query zurück, so dass man sofort den gewünschten Menüpunkt eingeben und auf das Ergebnis davon warten kann.

Bedenkt dabei aber bitte, dass xussd auf Mal-eben-Basis als schlichter Wrapper um gsm-ussd herum entstanden ist. Als solcher funktioniert er, ist aber kein vernünftiges GUI, zmindest für mich nicht. Eine bessere Fassung ist angedacht, aber ziemlich weit unten auf meiner Prioritätenliste. Also nicht zu gespannt drauf warten!

Weitere Änderungen in gsm-ussd verbessern den Umgang mit den USSD response encodings. Dadurch wird jetzt auch der ZTE MF100 UMTS-Stick (alias "O2 Prepaid Surfstick") unterstützt. Außerdem setzt gsm-ussd die Werte für die serielle Schnittstelle selbst, so daß auf den Aufruf von stty(1) verzichtet werden kann. Damit fallen eine externe Abhängigkeit und drei Prozesse pro gsm-ussd-Aufruf weg.

Hier die Dateien zum Download:

http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.1-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.3.1-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.1-0_all.deb

Einen Überblick über alle gsm-ussd bezogenen Downloads sind hier:
http://linux.zum-quadrat.de/downloads/index.html.

Und das komplette git-Repository findet sich unter
http://github.com/JochenHoch2/gsm-ussd.git
oder
git://github.com/JochenHoch2/gsm-ussd.git

Viel Spaß damit und sagt Bescheid, wenn ich was kaputtgemacht habe,
Jochen

gsm-ussd 0.3.1, 'cause less is more!

gsm-ussdPosted by Jochen Tue, May 25, 2010 19:01:18
It's that time of the week again: v0.3.1 is out.

User visible changes can be found in xussd. As gsm-ussd now supports USSD sessions, xussd was lagging behind. As of this release, xussd can handle USSD sessions, too - after a fashion. After displaying the result of a query, xussd will now request the next query. If you had an USSD session opened, you can now enter the menu entry or data that were requested and wait for the next result.

Please bear in mind that xussd was (is?) a spur-of-the-moment hack as a dialog-based wrapper around gsm-ussd. As such, it it workable, but not very convincing, at least not to me. A better GUI is planned, but quite a way down my list of priorities, so don't hold your breath.

Other changes in gsm-ussd add better handling of USSD response encodings, thus adding support for ZTE MF100 USB UMTS modem (a.k.a. O2 Prepaid Surfstick), and handling the serial interface without the need for stty(1). This removes an external dependency and saves three processes per gsm-ussd call.

Here are the new files for download:

http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.1-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.3.1-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.1-0_all.deb

For an overview of all gsm-ussd downloads, have a look at
http://linux.zum-quadrat.de/downloads/index.html.

The full git repository lies at

http://github.com/JochenHoch2/gsm-ussd.git
or
git://github.com/JochenHoch2/gsm-ussd.git

Have fun and let me know if i broke something,
Jochen

Ein ehrlicher Programmierer

FunPosted by Jochen Mon, May 24, 2010 20:48:40
Auf der Suche nach einer Möglichkeit, die externen "stty(1)"-Aufrufe aus gsm-ussd entfernen zu können, habe ich mir mal den Source von IO::Stty näher angeschaut. Werft selber mal einen Blick rein, speziell die Kommentare: "Are we there yet? No. Are we there yet? No. Are we there yet? ..." smiley Schwer motiviert, der Mann!

Huawei Dokumentation

HardwarePosted by Jochen Sun, May 23, 2010 21:21:17
Huawei ist ja äußerst geizig mit technischen Informationen, was deren Modems betrifft. So sind beispielsweise einige AT-Kommandos und Meldungen der Modems nirgends dokumentiert und Nachfragen im technischen Huawei-Modem werden stets abgeschmettert. Klar, wäre ja auch eine Unverschämtheit, wenn jemand sinnvolle Software für die eigenen Modems schreiben würde... smiley

Mit die beste Quelle zu AT-Kommandos von Huawei-Modems habe ich bei Baidu gefunden. Also Vorsicht, chinesische Schriftzeichen voraus:
-> http://wendang.baidu.com/view/708f0ca1284ac850ad02424d.html

Leider kann man sich das Dokument dort nur ansehen; ein Download soll wohl etwas kosten. Aber dafür reicht mein Chinesisch leider nicht. Außerdem irritiert mich, dass das Dokument einerseits als "Confidential" eingestuft ist, aber irgend jemand, der recht eindeutig nicht Huawei ist, damit Geld verdienen will...

Sollte irgendwer weitere Informationen finden, wäre ich für einen Link sehr dankbar!

« PreviousNext »