Als ich vor einigen Tagen per UMTS mal wieder eine relativ schlechte Verbindung hatte, fragte ich mich, ob man nicht ein bash script schreiben könnte, dass die UMTS Signalstärke regelmäßig ausließt und auf der bash ausgibt um so den UMTS stick evtl. "ausrichten" zu können.
Das ganze gestaltete sich jedoch schwieriger als gedacht. Mittels minicom kann man zwar auf den UMTS-Stick (Modem) zugreifen und auch die Signalstärke ausgeben lassen AT+CSQ, jedoch ließ sich das ganze nicht so automatisieren.
Mit viel gefummel hab ich dann doch irgendwann hinbekommen, leider nur wenn der UMTS Stick offline ist.
- mittels cat /dev/ttyUSB0 > $tempfile lass ich mir die Antworten des Modems in eine Datei schreiben.
- durch echo -ne "AT+CSQr" > /dev/ttyUSB0 frage ich die Signalstärke ab
- strings /tmp/test.log | grep '[0-9]+,[0-9]{2}' | awk '{print $2} ließt aus der binärdatei! den Signalwert aus
- und durch ATZ resettet ich das Modem wieder.
Die Befehle jeweils einige Zeit brauchen, habe ich eine Pausen mittels sleep eingebaut. Das fertige Script sieht dann wiefolgt aus:
#!/bin/bash #Programm while.sh tempfile=$(mktemp) # modem auslesen cat /dev/ttyUSB0 > /tmp/test.log & sleep 5 count=0 #Zähler auf Null setzen #So lange durchlaufen bis count nicht mehr unter 10 ist while [ $count -le 2 ] do echo -ne "AT+CSQr" > /dev/ttyUSB0 sleep 2 signal=$(strings /tmp/test.log | grep '[0-9]+,[0-9]{2}' | awk '{print $2}') echo "Signal:" $signal sleep 11 echo -ne "ATZr" > /dev/ttyUSB0 echo > /tmp/test.log sleep 2 done exit 0
aufgerufen werden muss es mittels
./umtssignal.sh && killall cat
Ein Kommentar
Ist „killall cat“ nicht ein bisschen sehr invasiv?