LINUX.ORG.RU

общение роутера на openwrt, и модема через ttyUSB2

 , ,


1

2

Компетентные люди просьба вправить кривые руки. Есть два скрипта которые посылают на устройство AT команду.

 
#!/bin/sh
stty -F /dev/ttyUSB2 9600 raw -echo
echo -n -e "AT+CBC\r" > /dev/ttyUSB2 &
cat /dev/ttyUSB2 | tee /www/VOLT &
exit 

#!/bin/sh
stty -F /dev/ttyUSB2 9600 raw -echo
echo -n -e "AT+CPMUTEMP\r" > /dev/ttyUSB2 &
cat /dev/ttyUSB2 | tee /www/TEMPER &
exit 

Вообщем проблема в том что если один за другим выполнять их. То например результат первого кода может записаться в файл результата второго кода. На сколько я понял это какие то логи терминала?

спасибо за помощь всем откликнувшимся

На сколько я понял это какие то логи терминала?

Утилита stty используется для установки и/или просмотра характеристик ввода-вывода терминала для устройства. Ты когда нибудь подключался к устройству посредством COM-порта?

e000xf000h ()
Последнее исправление: e000xf000h (всего исправлений: 1)
Ответ на: комментарий от vovker95

К чему ты ведешь?

AT+CBC - АТ-шная команда CBC используется для получения статуса подключения и уровня заряда батареи мобильного устройства.

AT+CPMUTEMP - тут и так все ясно «CPU TEMP».

tee - считывает данные из стандартного устройства ввода и записывает их на стандартное устройство вывода или в файл

else any questions?

e000xf000h ()

В общем-то, дело в том, что написан лёгкий бред:
Зачем тебе '&' после 'echo'?
Ты отправляешь с помощью '&' в фон связку 'cat | tee ', а каким образом она должна завершиться? (Подсказка: не раньше, чем модем отвалится и cat получит SIGHUP, потому что с такими установками терминала нормального EOF не получить, да и в каноническом режиме модем сам по себе его не даст. Ну или ты сам его прибьёшь, что для «pipe in subshell» нетривиально.)
Вообще то для подобных вещей нужен на выбор:
1) Expect (расширение Tcl).
2) Tcl с В/В, управляемым событиями.
3) Perl/Python с модулем Expect.
4) chat из пакета ppd (проще всего).
5) Читать ограниченное количество строк c помощью 'read' или 'head', причём в каноническом режиме, извращаясь перекодировками cr/nl - если у тебя OpenWRT, то скорее всего sh - это busybox ash, и возникнут проблемы с таймаутами.

ABW ★★★★★ ()
Ответ на: комментарий от vovker95

Я опечатался, вообще-то пакет называется 'ppp' (в gentoo 'net-dialup/ppp'), и в его составе, кроме программы pppd и некоторых других есть программа chat, и man к ней, не знаю, как это опакечивается на OpenWRT, у меня его нет.

ABW ★★★★★ ()
Ответ на: комментарий от vovker95

Похоже.
Вот, можешь посмотреть технику работы: ussd.sh
там большая часть тебе неинтересна, обрати внимание на функции CME_L и MInit.
и да, не давай ссылок на яндекс/мэйлру/вконтакте, приходится VPN поднимать, и то плохо работает.

ABW ★★★★★ ()
Ответ на: комментарий от ABW

хоть убей не понимаю как это работает. исходя из того что вы дали сделал вывод что нужно сформировать АТ команду так!

chat '' ‘AT+CBC’ OK

но это неправилньо пробовал так файл ussd

#!/bin/sh

UItty=/dev/ttyUSB2 # Default UserInterface tty device. NRTO=15 # Network Response TimeOut (sec). MTO=2 # Modem TimeOut (sec). LCKDir=/var/lock # uucp-style LoCKfile Directoty. T='' # Transmission mode.

chat () { /usr/sbin/chat «${@}» ; } # Location of chat program.

Stty () { stty -g && stty raw -echo ; } # Stty Rtty () { [ «${2}» ] && stty «${2}» < «${1}» ; } # Rtty

CME_L () { # Get maximal CME Error verbosity level (GSM 07.07 9.1). Chat REPORT ‘+CBC:’ '' ‘AT+CBC’ OK 2>&1 | sed ‘s/^.([0-9])[^0-9]$/\1/’ } # CME_L

MInit () { Chat '' ‘AT’ OK && Chat '' «AT+CBC» OK } # MInit >/www/ds

exit # ussd 

записывает ответ AT+CBC как правильно сформировать команду

vovker95 ()