Wysyłanie komend AT do modemu
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Wysyłanie komend AT do modemu
Czy ktoś z Was kiedykolwiek wysyłał komendy AT (Hayesa) w inny sposób niż przez np. wvdial?
Czy istnieje jakiś alternatywny sposób wysyłania?
Taka mozliwość dałaby mi i innym posiadaczom mobilnego internetu możliwość sprawdzania na bieżąco zasięgu, jakości połączenia czy chociażby technologii, w której aktualnie modem pracuje. Oprócz tego można byłoby wysyłać i przyjmować smsy, co też niestety czasami jest konieczne. Takie info można umieścić np. w conky, co przy odpowiednich ustawieniach dałoby funkcjonalność większą od tej z oryginalnych aplikacji operatorów przeznaczonych dla M$.
Problem polega jedynie na tym, żeby daną komendę dało się wysłać
-
- Sędziwy Jeż
- Posty: 66
- Rejestracja: 10 cze 2008, 20:59
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.04
- Środowisko graficzne: Inne
- Architektura: x86
Odp: Wysyłanie komend AT do modemu
Powiedzmy tak:
Kod: Zaznacz cały
$ cat /dev/ttyUSB1 &
$ echo AT > /dev/ttyUSB1
instaluje \/\/indows \/ista!
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
EDIT: Poddaję się:wall: Próbowałem wyniki komend umieścić w conky ale niestety nie daje to żadnych rezultatów oprócz blokowania się conky. Wpisywanie w konsoli daje takie rezultaty:
Kod: Zaznacz cały
lukasz@ubuntu:~$ echo AT > /dev/ttyUSB1
lukasz@ubuntu:~$ OK
Kod: Zaznacz cały
lukasz@ubuntu:~$ echo AT+CSQ > /dev/ttyUSB1
lukasz@ubuntu:~$ +CSQ: 10,99
OK
- raven18
- Serdeczny Borsuk
- Posty: 122
- Rejestracja: 23 lis 2007, 20:07
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: GNOME
- Architektura: x86_64
Odp: Wysyłanie komend AT do modemu

http://www.bez-kabli.pl/viewtopic.php?p=224912#224912
Sam może bym i napisał, ale skoro jest chętny

- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Kod: Zaznacz cały
--> WvDial: Internet dialer version 1.60
--> Cannot open /dev/ttyUSB3: Device or resource busy
--> Cannot open /dev/ttyUSB3: Device or resource busy
--> Cannot open /dev/ttyUSB3: Device or resource busy
A teraz do rzeczy, ja nie chciałem raven18 przez wvdial ale chyba ten sposób jest jak na razie najlepszy bo wyników poleceń podanych przez cb1986ster nie potrafię okiełznać
A więc wvdial mam w użyciu, wykorzystanie mojego wvdial.conf nie wchodzi w grę, dlatego napisałem sobie do tego drugi plik wvdial1.conf (umieściłem go sobie katalogu .conky znajdującym się w moim katalogu domowym):
Kod: Zaznacz cały
[Dialer Defaults]
Modem = /dev/ttyUSB1
Init = AT+CSQ
Kod: Zaznacz cały
#!/bin/bash
wvdial -C ~/.conky/wvdial1.conf &> /tmp/csq
#cat /tmp/csq
rssi=`cat /tmp/csq | grep +CSQ: | cut -c 7- | sed -e 's/,[0-9]*//' `
dbm=$(( 2 * $rssi - 113 ))
echo "Zasięg: $dbm""dBm"
rm /tmp/csq
Kod: Zaznacz cały
Zasięg: -93dBm
Mam nadzieję, że skrypt jest w miarę uniwersalny i obsłuży różne modemy, a mam tylko nadzieję dlatego, że nie jestem wirtuozem skryptów, przynajmniej na razie:craz:
Ktoś ma jakieś spostrzeżenia lub nowe pomysły?
EDIT: Aha, byłbym zapomniał... Jeśli chodzi o modem ZTE MF 636 to wynik jest podawany po około 30 sekundach. W sumie z tego co pamiętam na oryginalnych sterownikach w Windows czas ten był jeszcze większy.
W conky wpisałem:
Kod: Zaznacz cały
${texeci 35 ~/.conky/csqwv}
Z moich pobieżnych informacji wynika, że najmniejszą wartością sygnału, którą podają modemy jest -113dBm, co jest równoznaczne z brakiem zasięgu. U mnie wyświetla się -91dBm i chyba to też niewiele
Czekam panowie na Was bo nie chcę się rozpędzać i wyciągać dodatkowych informacji z modemu, zwłaszcza że jest to jeszcze niesprawdzone. A może ktoś wypróbuje to na innym modemie?
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
Jedyny minus jest taki, że u mnie conky startuje razem z systemem ... w obecnym kształcie =>
Kod: Zaznacz cały
${texeci 35 ~/.conky/csqwv}
Warto by go powiązać z jakimś "if_started", może dam rade przed końcem pracy.

EDIT:
No dobra, tak na szybko:
Kod: Zaznacz cały
ZTE MF626 : ${if_existing /dev/ttyUSB3}${texeci 35 /home/work/conky/csqwv}${else}Not Present.${endif}
.
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Kod: Zaznacz cały
#!/bin/bash
infof="/tmp/wvdat2"
rssi=`cat $infof | grep +CSQ: | cut -c 6- | sed -e 's/[[:space:]]*//' | sed -e 's/,[0-9]*//'`
oper=`cat $infof | grep +COPS: | cut -c 7- | sed -e 's/[[:space:]]*//' | sed -e 's/[0-9]*,[0-9]*,"//' | sed -e 's/",[0-9]*//'`
#act=`cat $infof | grep +COPS: | cut -c 7- | sed -e 's/[[:space:]]*//' | sed -e 's/[0-9]*,[0-9]*,"[[:print:]]*",//' | sed -e 's/,[[:alnum:]]*//'`
network=`cat $infof | grep +ZPAS: | cut -c 7- | sed -e 's/[[:space:]]*//' | sed -e 's/"//' | sed -e 's/"[[:print:]]*//'`
dbm_n=$(( 2*$rssi-113 ))
dbm=$dbm_n
case $1 in
0)
case $dbm in
85)
echo "Brak sieci";;
-226)
echo "Zaczekaj...";;
*)
echo "$dbm""dBm";;
esac;;
1)
if test -z "$oper" && test -n "$network" ; then
echo "$network"
else
if test -n "$oper" && test -z "$network" ; then
echo "$oper"
else
if test -z "$oper" && test -z "$network" ; then
echo "Brak danych"
else
echo "$oper/$network"
fi
fi
fi;;
esac
Kod: Zaznacz cały
Sieć: ${execi 35 ~/.conky/atwv 1}
Zasięg: ${execi 35 ~/.conky/atwv 0}
Jeśli chodzi o sieć to wyświetla mi: "Orange/EDGE", niestety mam możliwość łączenia się jedynie przez EDGE więc nie wiem jak to wygląda w innych sytuacjach.
Skrypt aktualny stan modemu wyświetla już w miarę ucywilizowany sposób:)
EDIT: Nooo... nieźle... skrypt umieściłem ale poza skryptem zmieniłem też inne pliki i filozofię działania. Po prostu już zapomniałem o tych kombinacjach...
Więc tak, na początku w .conkyrc umieściłem linię
Kod: Zaznacz cały
${texeci 35 ~/.conky/wvd}
Kod: Zaznacz cały
#!/bin/bash
wvdial -C ~/.conky/wvdial1.conf &> /tmp/wvdat1
touch /tmp/wvdat2
cat /tmp/wvdat1 > /tmp/wvdat2
Kod: Zaznacz cały
[Dialer Defaults]
Modem = /dev/ttyUSB1
Init1 = AT+CSQ
Init2 = AT+COPS?
Init3 = AT+ZPAS?
Z tego co pamiętam to linię
Kod: Zaznacz cały
cat /tmp/wvdat1 > /tmp/wvdat2
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
Zrób jeszcze dobry uczynek i zamieść tutaj automatykę usb_modeswitcha dla 636.
Pozdr.
.
EDIT:
Kurcze, drugi dzień próbuję i nic ... jak powstaje /tmp/csq ?
W pracy na stacjonarce działa, w domu na lapku nie działa ani "stary" ani "nowy" skrypt.

Odczyt mam stały ... -226dBm.
.
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Kod: Zaznacz cały
wvdial -C ~/.conky/wvdial1.conf
Ale to też jest dla mnie zagadką
EDIT: Domyślam się, że skoro w konsoli dostaje się wynik
Kod: Zaznacz cały
/dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
ttyUSB2 jest zajęte przez "roboczy" wvdial.conf.ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
Dla /dev/ttyUSB0 mam:
Dobry odczyt =>sudo wvdial -C ~/conky/wvdial1.conf
Hasło:
--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: AT+CSQ
--> Sending: ATQ0
--> Re-Sending: AT+CSQ
--> Modem not responding.
mam w konsoli dla wvdial1.conf:sudo wvdial -C ~/conky/wvdial1.conf
--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: AT+CSQ
AT+CSQ
+CSQ: 15,99
OK
--> Modem initialized.
--> Configuration does not specify a valid phone number.
--> Configuration does not specify a valid login name.
--> Configuration does not specify a valid password.
Jednak po odpaleniu conky nie mam ani błędów w konsoli, ani odczytu :[Dialer Defaults]
Modem = /dev/ttyUSB1
Init = AT+CSQ

a raczej jest taki jakby modem był odpięty czyli -226 dBm.
Pracuję na "starym" skrypcie:
odpalanym :#!/bin/bash
wvdial -C ~/conky/wvdial1.conf &> /tmp/csq
#cat /tmp/csq
rssi=`cat /tmp/csq | grep +CSQ: | cut -c 7- | sed -e 's/,[0-9]*//' `
dbm=$(( 2 * $rssi - 113 ))
echo "Zasięg: $dbm""dBm"
rm /tmp/csq
Kod: Zaznacz cały
ZTE MF626 : ${if_existing /dev/ttyUSB0}${texeci 35 ~/conky/csqwv}${else}Not Present.${endif}
.
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Z linii
Kod: Zaznacz cały
rm /tmp/csq
Spróbuj jeszcze zamiast
Kod: Zaznacz cały
texeci 35
Kod: Zaznacz cały
texeci 60
EDIT: csq pewnie jest tworzony, w zasadzie conky uruchamia skrypt, więc ewentualne błędy byłyby widoczne
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
.
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Być może są jakieś kłopoty z katalogiem /tmp, spróbuj jeszcze przerobić skrypt na np. taki:igotit4free pisze:Nie i dlatego pytam jak on powstaje.
.
Kod: Zaznacz cały
#!/bin/bash
wvdial -C ~/conky/wvdial1.conf &> ~/conky/csq
rssi=`cat ~/conky/csq | grep +CSQ: | cut -c 7- | sed -e 's/,[0-9]*//' `
dbm=$(( 2 * $rssi - 113 ))
echo "Zasięg: $dbm""dBm"
Plik /tmp/csq powstaje w ten sposób, że standardowe wyjście i dodatkowo standardowe wyjście błędów z programu wvdial jest przekierowywane do pliku, za co odpowiada sekwencja znaków &>
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
Ostatnia proponowana przez ciebie wersja skryptu "wytwarza" plik ~/conky/csq i to jest wielki krok do przodu ale :
1. dla wvdial1.conf z zawartością :
zawartość jest:[Dialer Defaults]
Modem = /dev/ttyUSB2
Init = AT+CSQ
2. natomiast dla:--> WvDial: Internet dialer version 1.61
--> Cannot open /dev/ttyUSB2: Device or resource busy
--> Cannot open /dev/ttyUSB2: Device or resource busy
--> Cannot open /dev/ttyUSB2: Device or resource busy
wynik jest:[Dialer Defaults]
Modem = /dev/ttyUSB1
Init = AT+CSQ
A zauważ, że ten właśnie konfig puszczany z konsoli i z sudo dawał dobry wynik => +CSQ: 15,99.--> WvDial: Internet dialer version 1.61
--> Cannot open /dev/ttyUSB1: Permission denied
--> Cannot open /dev/ttyUSB1: Permission denied
--> Cannot open /dev/ttyUSB1: Permission denied
Jakie uprawnienia nadałeś temu skryptowi => ~/conky/csq ?
.
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Kod: Zaznacz cały
-rwxr-xr-x 1 szefo szefo 519 2009-12-07 21:42 csqwv
Kod: Zaznacz cały
-rw-r--r-- 1 szefo szefo 90 2009-12-10 20:53 wvdial1.conf
Kod: Zaznacz cały
-rw-r--r-- 1 szefo szefo 451 2010-01-08 22:28 csq
Mi się wydaje, że jednak trzeba będzie zmodyfikować skrypt
EDIT: Poprawiłem wyżej własności
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
NIc z tego nie kumam, ale mam wolny wieczór.-rwx--x--x 1 arkman arkman 183 01-08 21:02 /home/arkman/conky/csqwv
-rwx--x--x 1 arkman arkman 55 01-08 21:13 /home/arkman/conky/wvdial1.conf
-rw-r--r-- 1 arkman arkman 185 01-09 15:14 /home/arkman/conky/csq
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
Kod: Zaznacz cały
chmod 755 csqwv
chmod 644 wvdial1.conf
EDIT: Przed chwilą ustawiłem uprawnienia na takie jak Twoje i wszystko działa, więc przyczyny tej sytuacji będziemy musieli chyba szukać gdzie indziej:-(
Mimo wszystko spróbuj to poustawiać tak jak u mnie
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu
Mam jakąś zaćmę, nie wiem jak to ugryźć.--> WvDial: Internet dialer version 1.61
--> Cannot open /dev/ttyUSB1: Permission denied
--> Cannot open /dev/ttyUSB1: Permission denied
--> Cannot open /dev/ttyUSB1: Permission denied
.
Android 7.0 @ Motorola Moto G4+
- lukaszb
- Sędziwy Jeż
- Posty: 47
- Rejestracja: 25 lis 2009, 13:50
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Środowisko graficzne: GNOME
- Architektura: x86_64
- Kontakt:
Odp: Wysyłanie komend AT do modemu
A wypróbuj komend, które zaproponował cb1986ster
- igotit4free
- Przyjaciel
- Posty: 6453
- Rejestracja: 29 paź 2008, 22:51
- Płeć: Mężczyzna
- Architektura: x86_64
- Lokalizacja: KRK
Odp: Wysyłanie komend AT do modemu


Rozwiązanie trochę od d..py strony ale działa ...
Nie umiałem się uporać z koniecznością odpalenia wvdial1.conf z odpowiednimi uprawnieniami a w praktyce "przez sudo".
W końcu wymyśliłem ... mojemu USEROWI_1 zezwoliłem na odpalanie wvdial z sudo ale bez hasła =>
a ~/conky/csqwv ma formę:# sudoers file.
# User privilege specification
root ALL=(ALL) ALL
USER_1 ALL=(ALL) ALL, NOPASSWD: /usr/bin/wvdial
teraz się wykonuje i czyta parametry z ~/conky/csq.#!/bin/bash
sudo wvdial -C ~/conky/wvdial1.conf &> ~/conky/csq
rssi=`cat ~/conky/csq | grep +CSQ: | cut -c 7- | sed -e 's/,[0-9]*//' `
dbm=$(( 2 * $rssi - 113 ))
echo " $dbm""dBm"
Ciekawe jak to powinno być "po bożemu" zrobione ?
.
Android 7.0 @ Motorola Moto G4+
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości