PDA

Bekijk de volledige versie : Скрипт чтения СМС на 3G модеме (ussd)



dlukanidin
05-06-2010, 18:44
Короткая предистория. Все началось с желтого мигающего огонька на модеме, который означал, что пришла СМС и жутко раздражал. А надо сказать, что Skylink шлет СМС после каждого захода на страницу статистики. Чтобы его убрать, надо было запустить родной софт и стирать СМС.
Начал разбираться и пришла мысль, а почему бы не наладить аварийное управление роутером через СМС. Например для следующих ситуаций:
- надо срочно перезагрузить роутер недоступный по сетевым интерфейсам и вне прямой досигаемости
- роутер работает с соединением с интернетом по требованию и надо поднять его интерфейс
- при использовании роутера для управления системами умного дома
и т.д и т.п
Надо сказать, что модем у меня Anydata ADU-300A (сразу оговорюсь, что скорее всего это заработает и для 100-й и 500-й серии). У этого модема есть управление по второму последовательному порту, который поднимается и в роутере при подключении модема через USB.
К сожалению внятной документации найти не удалось, только обрывки и сообщения людей которые тоже с ним работают. Но в результате нужная информация была добыта из сети и перехвате трафика фирменной программы.
Вторая проблема это работа с портом из скрипта. Но и тут удалось обойтись возможностями программы chat.
В результате получился скрипт который делает следующее:
- читает СМС из модема
- записывает их в файл с ограниченным объемом (более старые удаляются)
- удаляет прочитанные СМС из модема
- выполняет внешний командный скрипт с параметрами переданными в СМС, при получении СМС с номера хозяина.
- настройки можно задать в файле конфигурации

Если кому то это интересно, пробуйте и пишите комментарии.

sms.rar (http://sovetic.ru/upload/other/sms.rar)

P.S. Я неважно пишу на шелле, поэтому с радостью приму все коструктивные замечания по коду и идеи по оптимизации.
P.S.S Скорее всего не будет работать с драйвером option. По крайней мере у меня не получилось.

dlukanidin
07-06-2010, 08:41
Добавил обработку букв ёЁ.
Скорректировал скрипт запуска.

Не рекомендую пока вставлять этот скрипт в post-boot, кроме как для целей тестирования.

План дальнейших действий:
1. Найти (или написать) замену для chat используемому в скрипте для работы с диагностическим com портом. Подозреваю, что где то появляется конфликт с действиями pppd.
2. Переписать скрипт на php или с , т.к. в настоящем варианте, при чтении СМС, сильно жрёт процессорное время, что при большом количестве СМС может сказаться на основных обязанностях роутера.

ConstAntz
01-03-2011, 18:46
Сегодня возникла проблема между диром и модемом. У опсоса отвалился 3г и был доступен только эдж. Перезагрузка дира не помогла. Под виндой проверил смс-ящик - был забит до предела - 10/10. Почистил ящик - проблема осталсь. Оживить подключение удалось переключив модем в режим "только едж".
Есть интуитивные догадки, но локализовать проблему не могу. В то время, когда модем определился диром запускается непрерывная попытка дозвона, и вроде бы модем, как физическое устройство, уже готов, но как логическая единица - еще нет. Внутри модема на этот момент еще идет процесс настройки оборудования на опсоса (поиск и выбор режима GSM<-->EDGE<-->WCDMA).

dlukanidin
01-03-2011, 22:11
Сегодня возникла проблема между диром и модемом. У опсоса отвалился 3г и был доступен только эдж. Перезагрузка дира не помогла. Под виндой проверил смс-ящик - был забит до предела - 10/10. Почистил ящик - проблема осталсь. Оживить подключение удалось переключив модем в режим "только едж".
Есть интуитивные догадки, но локализовать проблему не могу. В то время, когда модем определился диром запускается непрерывная попытка дозвона, и вроде бы модем, как физическое устройство, уже готов, но как логическая единица - еще нет. Внутри модема на этот момент еще идет процесс настройки оборудования на опсоса (поиск и выбор режима GSM<-->EDGE<-->WCDMA).
Извините, но непонятно.
Напоминаю - Если Вы хотите чтобы мы тоже понимали Вашу ситуацию выкладывайте пожалуйста логи (какие и как мне кажется Вы знаете), иначе нам надо применять парапсихологические способности, а это не всегда получается :)

Итак вот файлы для нового скрипта. Это уже функционирующая версия для тестирования. Компилировать в соответствии с указанными ранее рекомендациями rss.

Ограничения:
1. Штатно пока работает только для одного wan
2. На ядре 2.4 если Ваш модем не может работать с драйвером option то его нужно заменить драйвером, который я выкладывал ранее.
3. Для статистики тип модема (CDMA или WCDMA) определяется из базы, поэтому , для наилучших результатов всех прошу прислать доп. информацию - Ваш модем - vid - pid - тип (CDMA или WCDMA) - номер порта данных - номер порта для статистики ussd и т.п.

Улучшения по сравнению с текущей версией:
1. Более качественная автоматика
2. Улучшенная настройка
3. Почти полная подготовка для multiwan
4. Возможна статистика для нескольких подключенных модемов

Тестируйте пожалуйста.

ConstAntz
02-03-2011, 15:29
Извините, но непонятно.
Помощь не требуется (вопрос-то решенный), отписался на будущее (bug report, так сказать, только может не в ту тему). Суть в том, что модем еще не выбрал рабочий диапазон работы с опсосом, но уже получает команды на подключение к инету, которые завершаются бесконечной ошибкой

Calling UMTS/GPRS
ATZ
OK
AT+CGDCONT=1,"IP","internet.mts.ru"
OK
ATD*99#
NO CARRIERFailed (NO CARRIER)
Script /tmp/ppp/peers/chat.sh finished (pid 215), status = 0x6
Connect script failed
pppd exit code: 8
Reconnect. Device: /dev/usb/tts/0



Улучшения по сравнению с текущей версией:
1. Более качественная автоматика
2. Улучшенная настройка
3. Почти полная подготовка для multiwan
4. Возможна статистика для нескольких подключенных модемов

Тестируйте пожалуйста.

Можно Вас попросить добавить к четвертому пункту поддержку чтения входящих смс? ну или хотя бы емкость ящика("AT+CPMS?").

TReX
02-03-2011, 16:43
Помощь не требуется (вопрос-то решенный), отписался на будущее (bug report, так сказать, только может не в ту тему). Суть в том, что модем еще не выбрал рабочий диапазон работы с опсосом, но уже получает команды на подключение к инету, которые завершаются бесконечной ошибкой .

Модем не выбирает никаких диапазонов, решение об этом принимает базовая станция на основании показателей сигнала...

dlukanidin
02-03-2011, 17:53
Можно Вас попросить добавить к четвертому пункту поддержку чтения входящих смс? ну или хотя бы емкость ящика("AT+CPMS?").

Для работы с смс нужно писать скрипт. Напишите и многие скажут спасибо, а если получится не очень объёмный, то можно будет и в прошивку включить (в rtn версию то уж наверняка). Пока же смело давайте эту команду как ussd и получите ответ.
В крайнем случае, если уж совсем с башем не дружите, напишите алгоритм в виде:
1. послать AT+CSQ
2. дождаться ответа CSQ: aa.bb
3. напечатать сигнал=aa, ошибки=bb (если aa=99, то нет сигнала)
4. если bb = 99 то перейти к пункту 6
5. иначе перейти к пункту 1
6. конец
Я сделаю из него скрипт. Самому разбираться с смс некогда, есть более интересные задачи.
Сразу предупреждаю для CDMA в DM режиме скрипт писать не буду, чтение СМС я уже делал. Ищите на форуме по моим сообщениям (где то пол года назад) и пишите пользовательский скрипт.

ConstAntz
20-03-2011, 23:04
Посмотрите пожалуйста, где я накосячил. Жизненно необходимо - готовится тестовая версия скрипта для чтения смс

[admin@(none) root]$ state_modem /dev/usb/tts/3 i
Modem port in location /dev/usb/tts/3 not exist


# Modem Status script for 3G modem
# ver. 1.005 beta 27.02.2011
# by dlukanidin, rss

[admin@(none) root]$ cat /proc/bus/usb/devpath
Device : Location : Info
/dev/usb/tts/0 : 1.4.0 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/1 : 1.4.1 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/2 : 1.4.2 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/3 : 1.4.3 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"

[admin@(none) root]$ sh -x /usr/sbin/state_modem /dev/usb/tts/3 i
+ isDriversLoaded
+ [ -z ]
+ getKernel
+ uname -r
+ kernel=2.4.37.11
+ kernel=2.4
+ [ 2.4 = 2.4 ]
+ acm_mod=acm
+ lsmod
+ grep usbserial
+ usbserial=usbserial 24196 0 [option]
usbcore 78888 1 [acm option usbserial usb-storage printer ehci-hcd usb-ohci]
+ lsmod
+ grep acm
+ acm=acm 7572 0 (unused)
usbcore 78888 1 [acm option usbserial usb-storage printer ehci-hcd usb-ohci]
+ [ -z usbserial 24196 0 [option]
usbcore 78888 1 [acm option usbserial usb-storage printer ehci-hcd usb-ohci] ]
+ return 0
+ devpath_name=/proc/bus/usb/devpath
+ tmp_name=/tmp/stat.tmp
+ modem_conf_name=/usr/share/modem/modems.conf
+ loc=/dev/usb/tts/3
+ grep : /dev/usb/tts/3 : /proc/bus/usb/devpath
+ awk -F: {print $1}
+ port=
+ lsmodem -c /usr/share/modem/modems.conf
+ loc=/dev/usb/tts/3
+ grep :/dev/usb/tts/3: /tmp/stat.tmp
+ cut -d: -f4
+ type=
+ rm /tmp/stat.tmp
+ [ -z ]
+ echo Modem port in location /dev/usb/tts/3 not exist
Modem port in location /dev/usb/tts/3 not exist
+ exit 2

dlukanidin
21-03-2011, 10:27
Посмотрите пожалуйста, где я накосячил. Жизненно необходимо - готовится тестовая версия скрипта для чтения смс

state_modem 1.4.3 i
Этот вызов отличается по параметрам от вызова специфичного для модема скрипта

ConstAntz
23-03-2011, 15:39
state_modem 1.4.3 i
Этот вызов отличается по параметрам от вызова специфичного для модема скрипта

А здесь?

[admin@(none) root]$ state_modem 1.4.3 i
sh: /dev/usb/tts/3: unknown operand
sh: /dev/usb/tts/3: unknown operand
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><pre>
Error: bad command /dev/usb/tts/3
</pre></body></html>

dlukanidin
23-03-2011, 16:33
А здесь?

[admin@(none) root]$ state_modem 1.4.3 i
sh: /dev/usb/tts/3: unknown operand
sh: /dev/usb/tts/3: unknown operand
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><pre>
Error: bad command /dev/usb/tts/3
</pre></body></html>
Не понимаю, как такое может быть. Похоже, что не прошло присвоение переменных. Может у Вас шелл не стандартный ?
У меня:
[root@DIR root]$ state_modem 1.3.0 i
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><pre>
Modem: huawei E1550
SysInfo: WCDMA(WCDMA) : home network : normal access : normal SIM
Operator: "MegaFon RUS"(3G)
SysCfg: WCDMA only(Roaming Supported)
</pre></body></html>

ConstAntz
23-03-2011, 17:00
Не понимаю, как такое может быть. Похоже, что не прошло присвоение переменных. Может у Вас шелл не стандартный ?
У меня:
[root@DIR root]$ state_modem 1.3.0 i
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><pre>
Modem: huawei E1550
SysInfo: WCDMA(WCDMA) : home network : normal access : normal SIM
Operator: "MegaFon RUS"(3G)
SysCfg: WCDMA only(Roaming Supported)
</pre></body></html>

Видать, пока баловался с выгрузкой модулей (в поисках проблем по соседней ветке) образовалось
[admin@(none) root]$ cat /proc/bus/usb/devpath
Device : Location : Info
/dev/usb/tts/0 : 1.4.0 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/1 : 1.4.1 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/2 : 1.4.2 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/3 : 1.4.3 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/0 : 1.4.0 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/1 : 1.4.1 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/2 : 1.4.2 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"
/dev/usb/tts/3 : 1.4.3 : Manufacturer="HUAWEI Technology" : Product="HUAWEI Mobile"

dlukanidin
23-03-2011, 17:53
Видать, пока баловался с выгрузкой модулей (в поисках проблем по соседней ветке) образовалось
2 Rss - чуть поправил скрипт, чтобы не падал при таких ошибках.

ConstAntz
23-03-2011, 18:15
2 Rss - чуть поправил скрипт, чтобы не падал при таких ошибках.

В догонку: rmmod usbserial не вносит коррективы в /proc/bus/usb/devpath, и последующий insmod usbserial vendor=xxxx product=yyyy - добавляет новые сведения к существующим.

dlukanidin
23-03-2011, 18:28
В догонку: rmmod usbserial не вносит коррективы в /proc/bus/usb/devpath, и последующий insmod usbserial vendor=xxxx product=yyyy - добавляет новые сведения к существующим.
Какая версия прошивки ?

ConstAntz
23-03-2011, 18:39
Какая версия прошивки ?

dubug extended (http://wl500g.info/showpost.php?p=227551) от Rss

dlukanidin
23-03-2011, 19:02
dubug extended (http://wl500g.info/showpost.php?p=227551) от Rss
Это очень странно эту ошибку нашли и специально убирали.
Попробуйте пожалуйста ещё раз.
1. При поднятом соединении остановите его из морды
2. rmmod option
3. cat /.../devpath
4. rmmod usbserial
5. insmod usbserial ...vid ...pid ...maxsize
6. cat /.../devpath
7. rmmod usbserial
8. cat /.../devpath

ConstAntz
24-03-2011, 14:17
Это очень странно эту ошибку нашли и специально убирали.
Попробуйте пожалуйста ещё раз.
1. При поднятом соединении остановите его из морды
2. rmmod option
3. cat /.../devpath
4. rmmod usbserial
5. insmod usbserial ...vid ...pid ...maxsize
6. cat /.../devpath
7. rmmod usbserial
8. cat /.../devpath


[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ rmmod option
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ rmmod usbserial
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ cat /proc/bus/usb/devices >> syslog.log
[admin@(none) /tmp]$ insmod usbserial vendor=0x12d1 product=0x140c
[admin@(none) /tmp]$ cat /proc/bus/usb/devices >> syslog.log
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ rmmod usbserial
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ cat /.version
1.9.2.7-d-r2743M-debug

rss
24-03-2011, 19:23
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ rmmod option
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ rmmod usbserial
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ cat /proc/bus/usb/devices >> syslog.log
[admin@(none) /tmp]$ insmod usbserial vendor=0x12d1 product=0x140c
[admin@(none) /tmp]$ cat /proc/bus/usb/devices >> syslog.log
[admin@(none) /tmp]$ lsmod >> syslog.log
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ rmmod usbserial
[admin@(none) /tmp]$ cat /proc/bus/usb/devpath >> syslog.log
[admin@(none) /tmp]$ cat /.version
1.9.2.7-d-r2743M-debug

Оказалось, что у меня было непропатченное ядро от промежуточных версий :(

Последняя отладочная, полностью пересобранная:
WL500gpv2-1.9.2.7-d-r2848-debug (http://narod.ru/disk/8343721001/WL500gpv2-1.9.2.7-d-r2848-debug.trx.html)

ConstAntz
01-04-2011, 01:04
Тестовая версия скрипта чтения смс
- только для прошивок со встроенной командой 'state_modem'
- только для моделей модемов с поддержкой 'AT команд'

'./smska -i' - информация о состоянии памяти смс
'./smska -r' - читать свежие сообщения
'./smska -r <digits>' - читать указанное сообщение
'./smska -r <string>' - декодировать PDU-строку
'./smska -r all' - читать все сообщения

не реализовано:
- работа с историей
- удаление сообщений
- склеивание разрозненных сообщений

2 dlukanidin, скелет готов - если есть желание, можете дорабатывать под нужды общества.

dlukanidin
01-04-2011, 12:02
Тестовая версия скрипта чтения смс
2 dlukanidin, скелет готов - если есть желание, можете дорабатывать под нужды общества.
Хорошая работа. У меня пока нет возможности посвятить этому достаточно времени, но у Вас и у самого получается отлично. Может проделаете ещё несколько шагов ?
Мои предложения:
1. Воспользоваться для выдачи AT команд и кодировки/раскодировки уже написанными функциями в файле /usr/share/modem/bin/state_3g_common (это не потому, что Вы плохо написали, а чтобы сократить объём общего кода для разных скриптов), при необходимости добавить туда нужные функции. (для получения доступа к этим функциям ставите в начале своего скрипта "source /usr/share/modem/bin/state_3g_common", примеры использования в той же папке, если есть вопросы - готов дать пояснения)
2. Весь вывод делать в stdout в формате JSON. Например для чтения:

{"new_count":"1","old_count":"1","sms":[{"num":"1","status":"new","time":"00:00:00","sender":"111","text":"test sms 1"},{"num":"2","status":"old","time":"00:00:00","sender":"111","text":"test sms 2"}]}
Если ошибка, то
{"error":"text ERROR"}
это только пример, реальная структура должна соответствовать логике чтения из модема, но хорошо если в ней будет максимум информации.
3. В качестве кодировки использовать UTF-8, соответствующие функции есть в вышеуказанном файле.
4. Добавить в функционал информацию о количестве сообщений (можно как в моём примере вывода), стирание сообщений.
5. Закомментировать, а после отладки убрать совсем отладочную печать (как я понимаю логирование Вы сделали для отладки).

А мы к этому скрипту потом приделаем кусок морды и будет очередное расширение функционала.

ConstAntz
02-04-2011, 01:36
Хорошая работа. Может проделаете ещё несколько шагов ?
Спасибо! (закрыв глаза на дату:D)

Мои предложения:
1. Воспользоваться для выдачи AT команд и кодировки/раскодировки уже написанными функциями в файле /usr/share/modem/bin/state_3g_common (это не потому, что Вы плохо написали, а чтобы сократить объём общего кода для разных скриптов), при необходимости добавить туда нужные функции.
2. Весь вывод делать в stdout в формате JSON.
3. В качестве кодировки использовать UTF-8, соответствующие функции есть в вышеуказанном файле.
4. Добавить в функционал информацию о количестве сообщений (можно как в моём примере вывода), стирание сообщений.
5. Закомментировать, а после отладки убрать совсем отладочную печать (как я понимаю логирование Вы сделали для отладки).

А мы к этому скрипту потом приделаем кусок морды и будет очередное расширение функционала.

При попытке инклудить и использовать уже написанные функции из state_3g_common возникали проблемы с codeUNItoUTF8() и decodePDU(). Для корректного перекодирования им требовалось передать на один печатный символ больше, т.е. вместо res=$(codeUNItoUTF8 "$msg") нужно res=$(codeUNItoUTF8 " $msg")

Но эти проблемы были не так страшны, как другая:

- перекодировка в UTF8 с использованием decodePDU() и codeUNItoUTF8() занимает относительно существенное время процессора. Основной причиной тормозов являются цикличное накопление переменной res="$res blablabla" и цикличное позиционирование по str=${str:i} Именно из-за этого, взляд упал на NCR и его "пережевывание" было отдано клиенту(браузеру). В результате - скорость поднялась в разы!

По вышеописанным причинам пришлось отказаться от "громоздкого" инклуда ради "медленных" функций и писать псевдодекодеры.

Назревают вопросы:
- понимаю, что нужно выводить скрипт из "ведущего" в "ведомый", пока не осознаю - как. Вернее с эти проблем нет, есть проблема как тестировать остальным. Вести одновременно корректировку 'state_modem.tgz' и одним архивом - сюда?
- стоит ли возвращаться к медленнному, но компактному (в плане кода) варианту? или JSON не может работать с NCR или ему UTF8 нужно отдать?

- по первому пункту. Если остановимся на NCR - имеет смысл разбить/пересмотреть state_3g_common, чтоб не инклудить все подряд (в целях экономии оперативной памяти).

- по второму пункту, не вижу препятствий. Вернее, есть одно - за 90 дней поверхностно познал bash, а Вы меня в новый омут (JSON) :eek:

- по четвертому пункту не совсем понятно. Вы имели ввиду количество сообщений по типам (new_count/old_count)? Смысл?
К примеру, я в морде нажал кнопку "СМС" - открылась страница с вкладкой "сообщения SIM", отсортированные по дате и помеченные в соответствии со статусом(new/old). Напротив каждого - птичка, а наверху две кнопки: помеченное "удалить","архивировать". Архив доступен на соседней вкладке, там же - настройки(путь database). Более полезным будет параметр sim_index (номер сообщения на SIM) для дальнейших манипуляций с этой ячейкой памяти из морды.

- по пятому пункту. Логирование ведется на "новый" случай для тех, кто когда-то спросит:"Сообщение не открылось. В чем дело?". А ему в ответ:"покажите лог". Пример: (предположительно, здесь настройки опсоса для телефона)
07919701949901F9440481214300F5113051318141218C0B05 040B840B8400038A05010106(cutted)
По большому счету - на эту фишку можно забить и оставить только раскодирование читабельных UCS2 и GSM7. Ну так как? Оставлять или забивать? А есть еще и MMS, и EMS, и FLASH, ихз что :confused:

И кстати! 9 просмотров и только один комент!?. Похоже это нужно только нам двоим...

dlukanidin
02-04-2011, 11:33
Спасибо! (закрыв глаза на дату:D)

Про дату не понял, дату сообщения ?


При попытке инклудить и использовать уже написанные функции из state_3g_common возникали проблемы с codeUNItoUTF8() и decodePDU(). Для корректного перекодирования им требовалось передать на один печатный символ больше, т.е. вместо res=$(codeUNItoUTF8 "$msg") нужно res=$(codeUNItoUTF8 " $msg")

Да, правильно, это потому, что ussd возвращает сообщение в кавычках.


Но эти проблемы были не так страшны, как другая:
...В результате - скорость поднялась в разы!

Да знаю эту проблему. Но NCR это не решение, всё равно остаётся очень много медленного кода. Планирую в дальнейшем сделать специализированную программу на Си реализующую некоторые трудоёмкие функции типа перекодировки, работы с ком портами, подсчёта контрольных сумм. В принципе у меня уже основа написана, но заложил туда слишком большой функционал, как следствие продукт получился громоздким и сложно используемым. Но сейчас главное - экономия места. Как только оно появится, например в результате сокращения размера морды, попробуем приделать небольшую компактную программу и все вопросы с быстродействием и, что более важно ИМХО, с загрузкой процессора, решим (кстати именно из-за загрузки процессора я приостановил развитие аналогичного скрипта для CDMA, там чтение и стирание были реализованы в DM режиме.)


Назревают вопросы:
- понимаю, что нужно выводить скрипт из "ведущего" в "ведомый", пока не осознаю - как. Вернее с эти проблем нет, есть проблема как тестировать остальным. Вести одновременно корректировку 'state_modem.tgz' и одним архивом - сюда?

ИМХО это наиболее правильно. Главное следить за размером результата и согласовать его потом с Rss.


- стоит ли возвращаться к медленнному, но компактному (в плане кода) варианту? или JSON не может работать с NCR или ему UTF8 нужно отдать?

JSON принимает всё HTML совместимое. Повторюсь, на данном этапе главное компактность, а как только этот вопрос снимется, то вопрос скорости будет решён более кардинальным способом.


- по первому пункту. Если остановимся на NCR - имеет смысл разбить/пересмотреть state_3g_common, чтоб не инклудить все подряд (в целях экономии оперативной памяти).

ИМХО разбивать common на части нет смысла


- по второму пункту, не вижу препятствий. Вернее, есть одно - за 90 дней поверхностно познал bash, а Вы меня в новый омут (JSON) :eek:

Это крайне просто (в отличии от баша) http://json.org/


- по четвертому пункту не совсем понятно. Вы имели ввиду количество сообщений по типам (new_count/old_count)? Смысл?
К примеру, я в морде нажал кнопку "СМС" - открылась страница с вкладкой "сообщения SIM", отсортированные по дате и помеченные в соответствии со статусом(new/old). Напротив каждого - птичка, а наверху две кнопки: помеченное "удалить","архивировать". Архив доступен на соседней вкладке, там же - настройки(путь database). Более полезным будет параметр sim_index (номер сообщения на SIM) для дальнейших манипуляций с этой ячейкой памяти из морды.

На Ваше усмотрение. Нет возражений, единственное - как точно организовать морду оставим чуть на потом.


- по пятому пункту. Логирование ведется на "новый" случай для тех, кто когда-то спросит:"Сообщение не открылось. В чем дело?". А ему в ответ:"покажите лог". Пример: (предположительно, здесь настройки опсоса для телефона)
07919701949901F9440481214300F5113051318141218C0B05 040B840B8400038A05010106(cutted)
По большому счету - на эту фишку можно забить и оставить только раскодирование читабельных UCS2 и GSM7. Ну так как? Оставлять или забивать? А есть еще и MMS, и EMS, и FLASH, ихз что :confused:

ИМХО надо убирать, всё равно в этом кроме Вас никто разбираться не будет. Решение проблем делаем так. Просим юзера прислать полный ответ на одну или несколько AT команд, Вы анализируете и даёте ему ответ, а при необходимости вносите правки в скрипт, чтобы учесть его вариант. У себя конечно оставляете вариант со всеми логами, но в прошивку его не вставляем.


И кстати! 9 просмотров и только один комент!?. Похоже это нужно только нам двоим...
Не заморачивайтесь, это стандартная ситуация. Это нужно многим, но активное участие в обсуждении люди принимают только когда им есть, что сказать по существу. Кроме того, реально об этом узнают после того, как это будет включено в прошивку и тогда Вы услышите спасибо :).

ConstAntz
05-04-2011, 23:20
ИМХО надо убирать, всё равно в этом кроме Вас никто разбираться не будет.

Я, пожалуй, тоже не буду. Особо любознательные - переставят симку в мобильник.

Тестовая модификация state_modem с добавленными командами "m" и "d <sim_index>" для работы с смс-сообщениями модема. Результат конвертируется в UTF8 (для 9-ти сообщений затраты времени ~12 сек.) и выводится на stdout в хтмл-формате. Как тестировать: разархивировать в любую новую директорию и перейти в нее. Вызывать через "./state_modem <порт> <команда>". Где <порт> - ui_port вашего модема в новом формате (например: 1.4.3), и <команда> - "m" для чтения всех сообщений или "d <sim_index>" для удаления сообщения из ячейки <sim_index>.
Критика приветствуется. json-формат на подходе.

dlukanidin
06-04-2011, 09:57
Я, пожалуй, тоже не буду. Особо любознательные - переставят симку в мобильник.

Тестовая модификация state_modem с добавленными командами "m" и "d <sim_index>" для работы с смс-сообщениями модема. Результат конвертируется в UTF8 (для 9-ти сообщений затраты времени ~12 сек.) и выводится на stdout в хтмл-формате. Как тестировать: разархивировать в любую новую директорию и перейти в нее. Вызывать через "./state_modem <порт> <команда>". Где <порт> - ui_port вашего модема в новом формате (например: 1.4.3), и <команда> - "m" для чтения всех сообщений или "d <sim_index>" для удаления сообщения из ячейки <sim_index>.
Критика приветствуется. json-формат на подходе.
Отлично. Посмотрел по диагонали, но нет доступа к роутеру до выходных, не попробовал. Сделаю правки и предложу Вам на рассмотрение:
1. state_modem - немного изменю логику вызова
2. state_sms - минималистично до нечитаемости, поправлю как я это вижу
3. Кусок морды (если успею)

ConstAntz
06-04-2011, 21:39
1. state_modem - немного изменю логику вызова
проверку $userFile лучше делать через '-x', а не '-e'


2. state_sms - минималистично до нечитаемости
согласно тз :)

dlukanidin
09-04-2011, 15:31
проверку $userFile лучше делать через '-x', а не '-e'
согласно тз :)
1. Переделал state_modem чтобы state_sms вызывался только для WCDMA модемов, убрал лишний скрипт.
2. Скорректировал state_sms, добавил читаемость, упростил вызов функции изменения порядка байтов, формирование времени
3. Сделал вывод в JSON

Сейчас мордой займусь

dlukanidin
12-04-2011, 14:47
Ну вот есть готовый результат по СМС с мордой.
Потратил много времени из-за таймаутов. Получился калабур :)
Проблема была в том, что сервер не успевал за заданное время сформировать список СМС. Но обходное решение найдено и реализовано.

Функционал морды писал наспех, так что можете легко поправить, если нужно (например добавить кнопку "стереть все").

2Rss гляньте плиз, в прошивку лезет ?

rss
12-04-2011, 18:06
2Rss гляньте плиз, в прошивку лезет ?
Посмотрю, но не сегодня.

dlukanidin
15-04-2011, 12:48
Посмотрю, но не сегодня.
Спасибо за информацию.

Итак:
1. Обнаружил баг появляющийся при наличии в инфо от оператора символов возврата каретки, исправил.
2. В связи с отсутствием в прошивке для роутеров с малым количеством памяти места, вставляться в такие прошивки это не будет.
3. При желании использовать - подключаете морду на альтернативном диске, меняете файлы из папки www, копируете скрипты из папки sbin в свою /usr/local/sbin убиваете httpd (чтобы он перезагрузился и подхватил новую папку www) и пользуетесь. После ребута не забывайте перейти на альтернативную морду.

ConstAntz
15-04-2011, 13:18
Спасибо за информацию.

Итак:
1. Обнаружил баг появляющийся при наличии в инфо от оператора символов возврата каретки, исправил.
С NCR этого бы не произошло :)

2. В связи с отсутствием в прошивке для роутеров с малым количеством памяти места, вставляться в такие прошивки это не будет.

УХ как ЗОЛ :mad: :eek: :mad: :(

dlukanidin
15-04-2011, 13:27
С NCR этого бы не произошло :)

Это вылезло из PDU на сендере. Я просто в морде все спец символы меняю на пробелы.

XShell
15-04-2011, 14:10
2. В связи с отсутствием в прошивке для роутеров с малым количеством памяти места, вставляться в такие прошивки это не будет.

Но можно же будет устанавливать на внешний диск? Останется версия в открытом доступе?
Я все пути правлю в Ваших скриптах на /opt/etc/modem :)
И все работает, спасибо Вам всем!

rss
15-04-2011, 17:53
Но можно же будет устанавливать на внешний диск? Останется версия в открытом доступе? Удалять с форума точно никто не будет. В процессе внедрения нового веб-интерфейса ожидается некоторая прибавка места. Тогда и вернемся.

Иначе прошивка для 500gpv2 будет больше 4МБ.

dlukanidin
18-04-2011, 00:10
Чтобы как-то закруглить тему с СМС, доделал чтение СМС для AnyDATA CDMA модемов. Может и на других будет работать, но тут надо проверять. Впрочем, если статус работает, то и смс тоже должны работать.
В скриптах повторяется приличный кусок кода из скрипта для статуса, и его надо будет перенести в common но это когда вернёмся к размещению в прошивке.

andr128
18-04-2011, 11:54
Чтобы как-то закруглить тему с СМС, доделал чтение СМС для AnyDATA CDMA модемов. Может и на других будет работать, но тут надо проверять. Впрочем, если статус работает, то и смс тоже должны работать.
В скриптах повторяется приличный кусок кода из скрипта для статуса, и его надо будет перенести в common но это когда вернёмся к размещению в прошивке.

А отправки не будет? :rolleyes: очень бы хотелось плиз!!!
Вы как основатель скрипта очень хорошо разбираетесь в этом!
Я к сожалению так и не смог разобраться с этой темой.

dlukanidin
18-04-2011, 14:22
А отправки не будет? :rolleyes: очень бы хотелось плиз!!!
Вы как основатель скрипта очень хорошо разбираетесь в этом!
Я к сожалению так и не смог разобраться с этой темой.
Пока нет. Причины:
1. Отправку делают другими средствами через СМС серверы. Есть здесь специализированная тема.
2. Отправка через свой модем будет стоить денег.
3. Для отправки через CDMA модем надо считать контрольную сумму. На Си у меня это есть, но переписывать на SH бессмысленно, там алгоритм довольно кривой с большой хэш таблицей.
4. ConstAntz наверное может написать для WCDMA модемов, но по моему мнению тоже не стоит время тратить. см. причину 1 и 2.

alex_optek
23-05-2011, 14:38
Чтобы как-то закруглить тему с СМС, доделал чтение СМС для AnyDATA CDMA модемов. Может и на других будет работать, но тут надо проверять. Впрочем, если статус работает, то и смс тоже должны работать.
.

Huawai E220(Beeline)
Чтение SMS работает, остальные функции тоже.
А на удаление, выдает

Error: <html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><pre>
Error: bad command d
</pre></body></html>

Удаление через ББ работает.
Не смертельно, но что делать?

dlukanidin
23-05-2011, 20:07
Error: <html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><pre>
Error: bad command d
</pre></body></html>

Что-то не так со скриптами. На удаление почему то вместо скрипта для смс вызывается стандартный скрипт статистики. Вы наверное что-то правили под себя ?

alex_optek
24-05-2011, 17:31
Что-то не так со скриптами. На удаление почему то вместо скрипта для смс вызывается стандартный скрипт статистики. Вы наверное что-то правили под себя ?
Спасибо за ответ.
Нет, не правил.
Но мысль понял, по разбираюсь.

P.S. Заново расставил все файлы из последней версии по местам, со странным инфо сообщением "Error: undefined", но удаляет.
Видимо неправильно записал файлы при смене версий.

dlukanidin
24-05-2011, 20:19
"Error: undefined", но удаляет.

Нет возможности разбираться с мелкими ошибками, пока не включим в прошивку. Много зависит от того, кто как добавляет.

ConstAntz
26-05-2011, 05:47
Спасибо за ответ.
Нет, не правил.
Но мысль понял, по разбираюсь.

P.S. Заново расставил все файлы из последней версии по местам, со странным инфо сообщением "Error: undefined", но удаляет.
Видимо неправильно записал файлы при смене версий.
Каким образом вызываете скрипты (веб, телнет, путти)?

stan
04-08-2011, 17:46
Тестовая версия скрипта чтения смс
- только для прошивок со встроенной командой 'state_modem'
- только для моделей модемов с поддержкой 'AT команд'


+1 в карму от меня ;)

ConstAntz
29-08-2011, 20:20
клиент - ie8

Сведения об ошибке на веб-странице

Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 3.0.04506.30; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
штамп времени: Mon, 29 Aug 2011 19:10:58 UTC


Сообщение: 'document.form.current_page.value' - есть null или не является объектом
Строка: 470
Символ: 1
Код: 0
URI-код: http://my.router/general.js


- проявляется при открытии окна Status & Log - USSD при первом заполнении поля USSD (например *100#) и первом нажатии "подача запроса". После выдачи результата - кнопка остается "нажатой".
- тянется с рождения скрипта modem_ussd.asp

rss
30-08-2011, 19:17
клиент - ie8

Сведения об ошибке на веб-странице

Агент пользователя: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 3.0.04506.30; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
штамп времени: Mon, 29 Aug 2011 19:10:58 UTC


Сообщение: 'document.form.current_page.value' - есть null или не является объектом
Строка: 470
Символ: 1
Код: 0
URI-код: http://my.router/general.js


- проявляется при открытии окна Status & Log - USSD при первом заполнении поля USSD (например *100#) и первом нажатии "подача запроса". После выдачи результата - кнопка остается "нажатой".
- тянется с рождения скрипта modem_ussd.asp

На 9-м тоже проявляется, но ошибки нет. Надо смотреть.

vrungel
03-11-2011, 11:00
Судя по всему это кодировка PDU, но в ответе от оператора указана кодировка отличная от 15. Это вполне может быть, т.к. операторы делают, что хотят.
Решение: либо определить что-же прислал оператор и скорректировать прошивку, либо подставить свой скрипт в котором принудительно вызывается раскодировка pdu.
Для этого:
1. Скопируйте скрипт /usr/share/modem/bin/state_3g_huawei в /usr/local/sbin/state_3g_modem
2. Внесите изменение в новом скрипте (отмечено красным)

getBalanceHuawei(){
if [ -z $2 ]; then encodePDU "*100#"; else encodePDU $2; fi
doCommand $port "AT+CUSD=1,$res,15" 2
getFlow $1 "CUSD" 8 "CUSD:"
ret=$?
echo $ret



Спасибо за помощь. Только, к сожалению, являясь полнейшим чайников в этом, я потратив весь день, так и не смог найти как это сделать. Не могли бы вы дать более развернутую инструкцию или скинуть ссылку туда, где это описано. Спасибо.

3MMM
05-11-2011, 20:28
3. При желании использовать - подключаете морду на альтернативном диске, меняете файлы из папки www, копируете скрипты из папки sbin в свою /usr/local/sbin убиваете httpd (чтобы он перезагрузился и подхватил новую папку www) и пользуетесь. После ребута не забывайте перейти на альтернативную морду.

Не ругайтесь - я новичок.
У меня D-Link DIR-320 с вашей прошивкой WL500gpv2-1.9.2.7-d-r3140L.trx
Пробую установить sms_2011_04_15.tgz
Несколько дней чтения форума к ответу не привели.
Файлы state_modem_sms и state_sms в /usr/local/sbin закинул.
Весь каталог www из корня скопировал в /opt/www. В него закинул modem_ussd.asp, sms_select_form.asp, syscmd_in.asp (кстати, а зачем у них стоит атрибут исполняемых?).
В /usr/local/sbin в post-mount добавил /bin/mount -o bind,sync,noatime,rw /tmp/harddisk/opt/www /www
flashfs save && flashfs commit && flashfs enable && reboot
После перезагрузки
df -h

Filesystem Size Used Avail Use% Mounted on
rootfs 3,0M 3,0M 0 100% /
/dev/root 3,0M 3,0M 0 100% /
tmpfs 15M 348K 15M 3% /tmp
/dev/discs/disc0/part2
3,7G 556M 2,9G 16% /tmp/mnt/disc0_2
/dev/discs/disc0/part2
3,7G 556M 2,9G 16% /opt
/dev/discs/disc0/part2
3,7G 556M 2,9G 16% /www

cd /
cd www
ls *.asp
файлы modem_ussd.asp, sms_select_form.asp, syscmd_in.asp присутствуют.

Через Веб интерфейс скрипты все равно не доступны.
Понимаю что не сделал последнего: убить httpd и снова запустить, но не могу понять как это сделать.
Помогите пожалуйста.

Фу, вроде разобрался. Выполнил killall httpd и все заработало.

Появляется ошибка при удалении выделенного сообщения и сообщение не удаляется:
http://linkme.ufanet.ru/images/6f3f53e7747edaccd9066319241f8629.png

dlukanidin
05-11-2011, 21:47
Спасибо за помощь. Только, к сожалению, являясь полнейшим чайников в этом, я потратив весь день, так и не смог найти как это сделать. Не могли бы вы дать более развернутую инструкцию или скинуть ссылку туда, где это описано. Спасибо.
1. включаете в морде ssh
2. устанавливаете на компе с виндой программу winscp
3. заходите на роутер по протоколу scp из этой программы и видите всё в привычном для Вас виде.
4. далее по предыдущему посту
5. если установлена программа putty, то из winscp можно запустить терминальную сессию (хотя можно и прямо с putty) и там уже давать команды, чтобы сохранятся и т.п.
6. всё это естественно можно было найти в поиске по форуму.
7. посмотрите также информацию с сайта из подписи rss

To 3MMM - извините, но у меня эти скрипты штатно не установлены, поэтому проверить не могу. Вроде в последней версии работало всё. Попробуйте пожалуйста разобраться сами, Вы уже достаточно много сделали и отладиться скорее всего не проблема.

3MMM
05-11-2011, 22:16
Вроде в последней версии работало всё. Попробуйте пожалуйста разобраться сами

Я вроде последнюю и ставил: sms_2011_04_15.tgz
Или это не последняя?
Жаль, сам разобраться вряд ли смогу (

ConstAntz
06-11-2011, 08:51
Я вроде последнюю и ставил: sms_2011_04_15.tgz
Или это не последняя?
Жаль, сам разобраться вряд ли смогу (

На других браузерах - такая же ошибка?

3MMM
06-11-2011, 09:03
На других браузерах - такая же ошибка?

Я пользуюсь Mozilla Firefox.
Из Internet Explorer-а у меня вообще не получилось зайти. Я им не пользуюсь ну и плюнул на него.

Вот из Google Chrome:

http://linkme.ufanet.ru/images/fbccb152227630461a3ab02c1903ebf3.png


На других браузерах - такая же ошибка?

А у вас эта версия нормально работает?

Люди, не уж то я такой один счастливчик у кого не работает удаление или никто не пользуется этими скриптами?

Прошивка WL500gpv2-1.9.2.7-d-r3140L.trx взята: http://sovetic.ru/communication/blog/index.php?page=post&blog=Connect_to_the_internet&id=10

ConstAntz
06-11-2011, 13:09
Люди, не уж то я такой один счастливчик у кого не работает удаление

Одну ошибку нашел.
Нужно поправить файл sms_select_form.asp в строке 110 вместо state_modem прописать state_modem_sms

Теперь удаляет, при этом выдает другую ошибку.

upd: И еще перестал работать USSD запрос.

3MMM
06-11-2011, 21:02
upd: И еще перестал работать USSD запрос.

Странно. У меня USSD запрос работает.

alex_optek
07-11-2011, 13:46
Странно. У меня USSD запрос работает.
У меня USSD запрос работает полностью, в том числе и удаление SMS с небольшим глюком.

alex_optek
07-11-2011, 13:52
Люди, не уж то я такой один счастливчик у кого не работает удаление или никто не пользуется этими скриптами?
[/url]
Удаление SMS работает, но после удаления выдает окно ошибки, не помню какое, нечего удалять для проверки. В 110 строке state_modem_sms было исходно, дата файла 16.04.2011,
Кстати, на попытку ввести что то в окно USSD, стал писать "Invalid character!", раньше такого не было.

3MMM
08-11-2011, 06:34
В 110 строке state_modem_sms было исходно, дата файла 16.04.2011

Где вы взяли файл от 16 числа? Я всю тему перелопатил несколько раз, последний в этом сообщении: http://wl500g.info/showpost.php?p=229898&postcount=1121 и он от 15 числа.


Кстати, на попытку ввести что то в окно USSD, стал писать "Invalid character!", раньше такого не было.

У меня с версией sms_2011_04_15.tgz если поправить файл sms_select_form.asp в строке 110 вместо state_modem прописать state_modem_sms то все работает нормально: и удаляет, и USSD работают:

http://linkme.ufanet.ru/images/7db7bb3fa3b8932523860bd8f90850fa.png

Только после удаления сообщения вылетает окошко с ошибкой:

http://linkme.ufanet.ru/images/35325f2a85e5923f19dcceb983b65b6c.png

Вот как бы его убрать? А то не красивенько как то. ))

alex_optek
08-11-2011, 14:34
Где вы взяли файл от 16 числа? Я всю тему перелопатил несколько раз, последний в этом сообщении: http://wl500g.info/showpost.php?p=229898&postcount=1121 и он от 15 числа.

Вот здесь
http://wl500g.info/showpost.php?p=230051&postcount=1126

vrungel
09-11-2011, 06:43
1. включаете в морде ssh
2. устанавливаете на компе с виндой программу winscp
3. заходите на роутер по протоколу scp из этой программы и видите всё в привычном для Вас виде.
4. далее по предыдущему посту


Спасибо за подробную инструкцию. Получилось открыть, скопировать и изменить файл, но при попытке залить обратно а роутер. Дает ошибку "Read-only file system". Изменить на роутере сразу тоже не получается. При попытке поменять права доступа через winscp или через putty дает тоже самое "Read-only file system".
Подскажите пожалуйста. Спасибо.

dlukanidin
09-11-2011, 12:17
Спасибо за подробную инструкцию. Получилось открыть, скопировать и изменить файл, но при попытке залить обратно а роутер. Дает ошибку "Read-only file system". Изменить на роутере сразу тоже не получается. При попытке поменять права доступа через winscp или через putty дает тоже самое "Read-only file system".
Подскажите пожалуйста. Спасибо.
Следуйте точно инструциям. Писать можно только в /tmp/... (или в /usr/local который ссылается на /tmp/local).

vrungel
10-11-2011, 08:29
Следуйте точно инструциям. Писать можно только в /tmp/... (или в /usr/local который ссылается на /tmp/local).

Спасибо за подсказку. Сделал теперь как было написано.
1. в папке /usr/local не было папки sbin. Создал папку, в нее записал файл, изменил там где вы сказали (только в одном месте).
2. при попытке опять отправить запрос, выдает опять такой же ответ. Только появился 0 на первой строчке.
----
0
USSD *111*019# : "CF393D4C7FAF41B39AECC6BA819A4210F90D82C55C31994B06 8BC540319B2E66D3D1702051D24D2FCBDD653A081E5E97E9A0 1A0C061301"
----
Как быть?

dlukanidin
15-11-2011, 21:09
Спасибо за подсказку. Сделал теперь как было написано.
1. в папке /usr/local не было папки sbin. Создал папку, в нее записал файл, изменил там где вы сказали (только в одном месте).
2. при попытке опять отправить запрос, выдает опять такой же ответ. Только появился 0 на первой строчке.
----
0
USSD *111*019# : "CF393D4C7FAF41B39AECC6BA819A4210F90D82C55C31994B06 8BC540319B2E66D3D1702051D24D2FCBDD653A081E5E97E9A0 1A0C061301"
----
Как быть?
Извините, был уставший ошибся.
Хотел посмотреть не код возврата, а полный ответ на ussd
надо было сделать
echo $answer

buzya
15-11-2011, 22:32
Уважаемый dlukanidin, не могли бы Вы адаптировать Ваш скрипт SMS Monitor для модемов Huavei. Пробовал запускать на Huavei 156, в логе пишет - нет ответа. Спасибо!

dlukanidin
17-11-2011, 21:48
Уважаемый dlukanidin, не могли бы Вы адаптировать Ваш скрипт SMS Monitor для модемов Huavei. Пробовал запускать на Huavei 156, в логе пишет - нет ответа. Спасибо!

Извините, но не очень понимаю о каком собственно скрипте речь. Покажите ссылку.
А вообще, у меня такого модема нет, но в принципе все WCDMA модемы huawei ИМХО поддерживают очень похожие наборы команд. Может не тот порт указан?
Нужна более подробная информация.

buzya
18-11-2011, 08:11
Извините, но не очень понимаю о каком собственно скрипте речь. Покажите ссылку.
А вообще, у меня такого модема нет, но в принципе все WCDMA модемы huawei ИМХО поддерживают очень похожие наборы команд. Может не тот порт указан?
Нужна более подробная информация.

Ваш пост:
http://www.wl500g.info/showthread.php?t=17474&page=4&highlight=%F3%EF%F0%E0%E2%EB%E5%ED%E8%E5+%F0%EE%F3 %F2%E5%F0%EE%EC

# ./smsread.sh
Error read sms info: no answer , status=3
# ./smsloop.sh
Error read sms info: no answer , status=3
Error read sms info: no answer , status=3
Error read sms info: no answer , status=3
.....

Может в sms.conf поковыряться? Порты все перебрал, номер мастера смс указал. Роутер ДИР-320, прошивка 1.9.2.7-d-r3140.
В принципе, интересует удалённая перезагрузка по смс каналу. Что надо указать в sms.sh?
Спасибо!

Из веб-морды (путём подмены оной) все смс читаются и удаляются на ура!

dlukanidin
20-11-2011, 21:54
Ваш пост:
http://www.wl500g.info/showthread.php?t=17474&page=4&highlight=%F3%EF%F0%E0%E2%EB%E5%ED%E8%E5+%F0%EE%F3 %F2%E5%F0%EE%EC

# ./smsread.sh
Error read sms info: no answer , status=3
# ./smsloop.sh
Error read sms info: no answer , status=3
Error read sms info: no answer , status=3
Error read sms info: no answer , status=3
.....

Может в sms.conf поковыряться? Порты все перебрал, номер мастера смс указал. Роутер ДИР-320, прошивка 1.9.2.7-d-r3140.
В принципе, интересует удалённая перезагрузка по смс каналу. Что надо указать в sms.sh?
Спасибо!

Из веб-морды (путём подмены оной) все смс читаются и удаляются на ура!
К сожалению ссылка на страницу не информативна, моих сообщений там нет (возможно у нас разное разбиение по страницам?).
Но по теме догадался, что наверное речь идёт о скрипте который я писал для CDMA AnyData модемов (сообщение вроде в эту тему переносили). Напрямую его использовать с WCDMA модемами невозможно, т.к. там абсолютно другая система команд, даже не AT, но его не сложно привести к управлению WCDMA модемами. Надо только заменить логику управления модемом, которая есть уже готовая в последних скриптах работы с СМС. В принципе не вижу ничего не выполнимого, но к сожалению для меня это сейчас не актуально, а свободного времени, опять же к сожалению, не так много.
Попробуйте разобраться сами, если что-то конкретное не будет получаться, я помогу.

buzya
22-11-2011, 06:53
Попробуйте разобраться сами, если что-то конкретное не будет получаться, я помогу.[/QUOTE]

Спасибо! Немного огорчили, так как для меня, боюсь, это непосильная задача. Может быть, другие участники форума приблизились к решению этой задачи (удалённое управление 3G (WCDMA) модемом посредством СМС?

dlukanidin
22-11-2011, 20:02
для меня, боюсь, это непосильная задача
Да нет, просто посмотрите внимательно скрипты. Там всё довольно прозрачно. Логика то простая:
1. С нужной Вам периодичностью проверять наличие СМС (их число > 0), т.е. запускать скрипт проверки.
2. Если есть СМС, то читать их в цикле и анализировать.
3. Если СМС соответствует определённому шаблону, например начинается с известного только Вам кодового слова, то его остаток будет командой, которую нужно выполнить, например reboot. (Sample: dhdkfgortytjhfkl reboot)
4. Исполненную СМС скидываем в лог файл (лучше на внешнем носителе) и удаляем.
5. Можно также скинуть в лог и удалить и СМС не являющиеся командами, что предотвратит переполнение стека СМС, что является критичным для некоторых моделей модемов.

Дерзайте, у Вас всё получится, удачи!

vrungel
29-11-2011, 06:12
Извините, был уставший ошибся.
Хотел посмотреть не код возврата, а полный ответ на ussd
надо было сделать
echo $answer

Добрый день, был в командировке, только вернулся.

getBalanceHuawei(){
if [ -z $2 ]; then encodePDU "*100#"; else encodePDU $2; fi
doCommand $port "AT+CUSD=1,$res,15" 2
getFlow $1 "CUSD" 8 "CUSD:"
ret=$?
echo $answer

заменил echo $ret на echo $answer в вашей инструкции, получил вот такой результат:



/usr/sbin/state_modem: line 94: /usr/local/sbin/state_3g_modem: Permission denied

Такой ответ он стал давать на любые нажатия кнопок (трафик, инфо, сигнал, а также на запросы)

dlukanidin
29-11-2011, 19:46
Добрый день, был в командировке, только вернулся.

getBalanceHuawei(){
if [ -z $2 ]; then encodePDU "*100#"; else encodePDU $2; fi
doCommand $port "AT+CUSD=1,$res,15" 2
getFlow $1 "CUSD" 8 "CUSD:"
ret=$?
echo $answer

заменил echo $ret на echo $answer в вашей инструкции, получил вот такой результат:



/usr/sbin/state_modem: line 94: /usr/local/sbin/state_3g_modem: Permission denied

Такой ответ он стал давать на любые нажатия кнопок (трафик, инфо, сигнал, а также на запросы)
Как то он у Вас криво отредактировался, проверьте пожалуйста права на файл и, что он исполняемый.

KEKC
27-07-2012, 07:46
Подскажите пожалуйста, какими командами через командную строку отправить и получить (читать c сим-карты) SMS, при условии, если инет берется WAN 3G модем, роутер WL500 gp v2, прошивка 1.9.2.7-d-r2624
Модем стандартный - Huawei E171

vectorm
27-07-2012, 12:43
Подскажите пожалуйста, какими командами через командную строку отправить и получить (читать c сим-карты) SMS, при условии, если инет берется WAN 3G модем, роутер WL500 gp v2, прошивка 1.9.2.7-d-r2624

p.s. Уважаемые модераторы, огромная просьба не переносить тему в другую, т.к. ни по тегам, ни по поиску нет такой инфы (почти сутки ищу, уже крыша едет). Есть только по отправке скриптами, сервисами и т.д., а мне нужно именно через модем 3G + читать полученные сообщения.
При условии, что Вы не указываете ни производителя, ни наименования модема - поиски затянутся на очень длинные сроки.
К тому-же, что мешает поискать решение в форумах по Линуксу? В Убунтоводческих наверняка есть варианты работы с конкретной моделью модема.

KEKC
27-07-2012, 13:41
При условии, что Вы не указываете ни производителя, ни наименования модема - поиски затянутся на очень длинные сроки.
К тому-же, что мешает поискать решение в форумах по Линуксу? В Убунтоводческих наверняка есть варианты работы с конкретной моделью модема.
Модем стандартный - Huawei E171

vectorm
27-07-2012, 17:47
Модем стандартный - Huawei E171
Стандартный для кого?
Так искать (http://lmgtfy.com/?q=huawei+E171+%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B 2%D0%BA%D0%B0+sms+%D0%B2+linux) пробовали?
"Стандартных", встроенных в консоль роутера, команд не ждите.

KEKC
27-07-2012, 19:51
"Стандартных", встроенных в консоль роутера, команд не ждите.
Спасибо за наводку, решил пробовать gnokii, вот только ни как не могу понять на каком порту мой модем висит, по идее должен быть /dev/USB/tts/0 либо /dev/USB/tts/1, а его там нет), а это нужно для конфига.

CODeRUS
01-08-2012, 14:24
Собственно, сабж.
Возможно ли это?

Модем ZTE MF180
Роутер WL500gpv2
Прошивка 1.9.2.7-rtn-r4330

IlyaJaguar
02-10-2012, 09:02
Подскажите пожалуйста, как обнулить показания счётчика трафика из окна: "Status & Log - USSD", кнопка "Get Traffic" ?

Уже и модем переподключал, и сброс делал - безрезультатно! Может, какой-то командой *.log стереть нужно? Но я не нашёл - где и как...

dlukanidin
05-10-2012, 11:41
Подскажите пожалуйста, как обнулить показания счётчика трафика из окна: "Status & Log - USSD", кнопка "Get Traffic" ?

Уже и модем переподключал, и сброс делал - безрезультатно! Может, какой-то командой *.log стереть нужно? Но я не нашёл - где и как...

Там 2 трафика, один берётся из свойств соединения ppp0 и сбрасывается после каждого установления соединения (сеансовый трафик), а другой берётся из модема и его можно сбросить соответствующей AT сомандой, которая зависит от конкретного модема. Ищите команды для вашего модема и посылайте их через USSD запрос. Единственно может потребоваться заэкранировать специальные символы, если они используются в команде (комбинация из опостофов и обратного слеша).


Переключения не произошло. Судя по логу проблема возникла при отправке третьего MessageContent.
Я бы попробовал без него, ну и увеличил бы время на ожидание ключиком "-s 20" (или в конфиге, наверное, success=20)

Думаю единственный реальный способ просниферить usb при запуске штатной программы.

Virtuals
28-10-2012, 05:40
что не правильно со скриптами:
ну в двух словах...
в getFlow идет поиск CUSD (это запрос) и ^(а это ваще не понял нафиг) :( а потом выборка CUSD: (это ответ) ну нафига?
при том символ ^ рано или поздно встретится.... но чаще поздно., модем раз в несколько сек шлет служебный текстовый пинг в консоль вот там и найдется этот символ., и частенько получается так: CUSD запрос, потом служебный пинг с символом ^ потом CUSD: ответ... короче фигня полная.,

решение озвучил выше, просто забыть про getFlow $1 "CUSD" 8 "CUSD:" и вместо него пользовать checkFlow $1 8 "CUSD:" :) работает как часы

модем от мегафона был, разлочен на все симки

сидюк модем сетевуха флешка:
P: Vendor=12d1 ProdID=1436 Rev= 0.00
S: Manufacturer=HUAWEI Technology

модем, флешка:
P: Vendor=12d1 ProdID=1001 Rev= 0.00
S: Manufacturer=HUAWEI Technology

PS сам сижу на кабеле :). модем поднять паралельно... на боевые испытания пойдет со вторника.

Virtuals
28-10-2012, 05:54
вот кусок из чата:


^BOOT:44635212,0,0,0,20

AT+CUSD=1,AA180C3602,15


OK


+CUSD: 0,"04110430043B0430043D0441003A003200310030002C003500 30044000200423044104
3B04430433043000200022042704350440043D044B04390020 0441043F04380441043E043A002200
2E00200418043D0444043E003A0020002A003100310031002A 0034003400320023",72



^BOOT:44635212,0,0,0,20



эти гадские ^BOOT:44635212,0,0,0,20 :) могут попастьи между запросом и ответом

PS и еще важно! кто в курсе что будет при переполнении буфера серального порта?
глянул
cat /dev/ttyUSB2

мне это не понравилось.... там ентих ^BOOT:44635212,0,0,0,20 просто дочерта.... не нужно ль их выгребать оттуда периодически?

dlukanidin
28-10-2012, 09:53
что не правильно со скриптами:
ну в двух словах...
в getFlow идет поиск CUSD (это запрос) и ^(а это ваще не понял нафиг) :( а потом выборка CUSD: (это ответ) ну нафига?
при том символ ^ рано или поздно встретится.... но чаще поздно., модем раз в несколько сек шлет служебный текстовый пинг в консоль вот там и найдется этот символ., и частенько получается так: CUSD запрос, потом служебный пинг с символом ^ потом CUSD: ответ... короче фигня полная.,

Согласен, какой-то странный код, не могу вспомнить зачем было сделано именно так. Еще раз посмотрел скрипты и попробовал на прошивке от вампика, работает через раз и скорее всего именно из-за '^'. Предлагаемое решение - в getFlow


chat -t $3 -e $2 '' <$1 >$1 2>/tmp/chat.tmp



решение озвучил выше, просто забыть про getFlow $1 "CUSD" 8 "CUSD:" и вместо него пользовать checkFlow $1 8 "CUSD:" :) работает как часы

Это решение ИМХО не верно, т.к. сильно зависит от скорости ответа оператора.

Что касается инфо которую посылает модем, это могут быть:
^MODE - присылается при смене режима связи например с WCDMA на HSPA+
^RSSI - присылается при смене силы сигнала
^BOOT - присылается регулярно, но что это и какая инфо не нашёл
^CSNR - присылается при смене отношения сигнал/шум
^DSFLOWRPT - присылается раз в 2 сек с инфо о скорости обмена, времени и трафике сессии. Выключается командой AT^DSFLOWRPT=0

Virtuals
28-10-2012, 10:17
да нифига checkFlow не зависим от скорости реакции оператора.... уж несколько дней гоняю, работает ка часы...
а вот если использовать
getFlow
то:
chat -t $3 -e $2 '' '\n' '' <$1 >$1 2>>/tmp/chat.tmp

и вызывать
getFlow $1 "CUSD:" 8 "CUSD:"
(двоеточие!)
тож работает как часы.

PS ту просто логическая ошибка в вызове....
CUSD это условие равно запросу (оно будет в логе чата!)
а
CUSD: это ответ.
и нам нужно отловить всего-лиж от CUSD: (с двоеточием) до конца строки.

PSPS как вы поняли по названию прошивки у мну тож от Вампика ;) и даже на дир320 (они у мну самые боевые в плане тестов)., но данный функционал от прошивки не зависит (почти, ибо древние в учет не берем где порты зависали)

dlukanidin
28-10-2012, 11:24
да нифига checkFlow не зависим от скорости реакции оператора.... уж несколько дней гоняю, работает ка часы...
а вот если использовать
getFlow
то:
chat -t $3 -e $2 '' '\n' '' <$1 >$1 2>>/tmp/chat.tmp

не понял зачем ждать перевод строки, просто удлиняет текст скрипта не неся полезной нагрузки


и вызывать
getFlow $1 "CUSD:" 8 "CUSD:"
(двоеточие!)
тож работает как часы.

PS ту просто логическая ошибка в вызове....
CUSD это условие равно запросу (оно будет в логе чата!)
а
CUSD: это ответ.
и нам нужно отловить всего-лиж от CUSD: (с двоеточием) до конца строки.

Не согласен, т.к. CUSD которое идёт эхом на ввод команды будет считано в doCommand
Логика следующая: посылаем команду, она выполняется и модем присылает OK, ждём ответа оператора (именно для этого и нужен getFlow). Таким образом двоеточие не играет роли и используется во второй строке только чтобы уменьшить вероятность реакции на появление этих символов в буфере от другой команды или просто в потоке мусора, который иногда прорывается на ui порт, правда довольно редко.



PSPS как вы поняли по названию прошивки у мну тож от Вампика ;) и даже на дир320 (они у мну самые боевые в плане тестов)., но данный функционал от прошивки не зависит (почти, ибо древние в учет не берем где порты зависали)

Протестируйте пожалуйста и тот вариант который я предложил, примите решения какие правки надо внести и предложите вампику, чтобы он поправил и в своём моде и на транке.

Virtuals
28-10-2012, 14:54
#Протестируйте пожалуйста и тот вариант который я предложил, примите решения какие правки надо внести и предложите вампику, чтобы он поправил и в своём моде и на транке.
#chat -t $3 -e $2 '' <$1 >$1 2>/tmp/chat.tmp

на запрос getFlow $1 "CUSD" 8 "CUSD:"
возвращает ровно
#0A 0A 2B 43 55 53 44 0A ..+CUSD.
:) ни битом более

так что пока решение самое первое по аналогии с ZTE модемами самое надежное:

getBalanceHuawei(){
if [ -z $2 ]; then encodePDU "*100#"; else encodePDU $2; fi
doCommand $port "AT+CUSD=1,$res,15" 5
#getFlow $1 "CUSD" 8 "CUSD:"
checkFlow $1 8 "CUSD:"

dlukanidin
28-10-2012, 17:58
#Протестируйте пожалуйста и тот вариант который я предложил, примите решения какие правки надо внести и предложите вампику, чтобы он поправил и в своём моде и на транке.
#chat -t $3 -e $2 '' <$1 >$1 2>/tmp/chat.tmp

на запрос getFlow $1 "CUSD" 8 "CUSD:"
возвращает ровно
#0A 0A 2B 43 55 53 44 0A ..+CUSD.
:) ни битом более

так что пока решение самое первое по аналогии с ZTE модемами самое надежное:

getBalanceHuawei(){
if [ -z $2 ]; then encodePDU "*100#"; else encodePDU $2; fi
doCommand $port "AT+CUSD=1,$res,15" 5
#getFlow $1 "CUSD" 8 "CUSD:"
checkFlow $1 8 "CUSD:"
Всё, я восстановил в памяти всю историю. Все скрипты были написаны достаточно правильно, но в ранних huawei было по умолчанию включено DSFLOWRPT, что позволяло точно определить конец команды CUSD по началу следующего репорта, чтобы получить целиком весь ответ (особенности работы команды chat). У ZTE этой возможности не было, и было выбрано другое решение - очистить буфер и получить фиксированное число строк, в одной из которых и будет ответ. В итоге оба варианта кривые.
Я бы рекомендовал выбрать Вами же предложенный вариант в getFlow, почему он не пришёл мне в голову раньше, не знаю Ж)


chat -t $3 -e $2 '' '\n' '' <$1 >$1 2>>/tmp/chat.tmp

т.к. именно он является наиболее правильным и будет работать и на Huawei и на ZTE, причём скрипт на ZTE тоже надо скорректировать на getFlow, а checkFlow выкинуть вовсе. Только хорошо бы протестировать (мой модем ZTE пропал в недрах билайна).
С checkFlow, это всё таки компромис, и если будет задержка от оператора или новые версии модема будут чаще репорт отдавать или сигнал запрыгает можно и не успеть получить ответ за 8 строк, в общем по любому криво.

Virtuals
28-10-2012, 19:09
уговорили :) перехожу на мой вариант getFlow и тестирую оба модема....
благо именно сегодня у меня и huawei E1750 и zte mf180 :) под рукой....
и я ток что поднял тестовый роутер как раз под модем (наверное чувствовал)

вроде работает на обоих модемах, изменения в вложении

ЗЫ ща воткнул оба модема через хаб :)... хм поднялись оба, правда автоматом дозвон не пошел (что логично)
//автодозвон прицепился не к тому модему (без симки).... выбрал его ручками и все взлетело.

USSD пашет на обоих.

dlukanidin
29-10-2012, 09:34
вроде работает на обоих модемах, изменения в вложении

ЗЫ ща воткнул оба модема через хаб :)... хм поднялись оба, правда автоматом дозвон не пошел (что логично) //автодозвон прицепился не к тому модему (без симки).... выбрал его ручками и все взлетело.

USSD пашет на обоих.

Отлично.
Добавил косметические правки и немного инфо для новых модемов.

ryzhov_al
29-10-2012, 09:45
Здорово, Дмитрий!

Я для чтения SMS целый SMS Server Tool 3 (http://smstools3.kekekasvi.com/) для репозитория собирал (http://wl500g.info/showthread.php?28036-%CF%E5%F0%E5%F5%EE%E4-%ED%E0-%ED%EE%E2%FB%E9-%F0%E5%EF%EE%E7%E8%F2%EE%F0%E8%E9-Entware-%F1-Optware&p=249026#post249026).

Virtuals
29-10-2012, 12:43
Здорово, Дмитрий!

Я для чтения SMS целый ... собирал.

это для Entware., что многие не могут позволить, некоторые пугаются... и часть не понимает что это увы:(..

PS хотелось-бы минимум функционала и в прошивке "изкоробки"

PSPS ух вспомнить чтоль времена бурной молодости.... эти модемы просто дочерта инфы могут дать., и часть ее очень полезна при выборе напр места установки модема/роутера.
напр такое как координаты БС и мощь сигнала

dlukanidin
29-10-2012, 15:30
Здорово, Дмитрий!

Я для чтения SMS целый SMS Server Tool 3 (http://smstools3.kekekasvi.com/) для репозитория собирал (http://wl500g.info/showthread.php?28036-%CF%E5%F0%E5%F5%EE%E4-%ED%E0-%ED%EE%E2%FB%E9-%F0%E5%EF%EE%E7%E8%F2%EE%F0%E8%E9-Entware-%F1-Optware&p=249026#post249026).
Это конечно крутая вещь, но ИМХО нужна только при необходимости каких-то сложных ежедневных действий.
Для рядового пользователя в большинстве случаев достаточно посмотреть, что пришло (т.к. некоторые операторы присылают уведомления по sms) и стереть что-то.
Я сейчас для работы с модемом web приложение делаю потихоньку, в основном для safari (iOs), хотя ничего принципиально нового там не будет, просто чуть удобнее и симпатичнее.

Virtuals
29-10-2012, 15:37
Отлично.
Добавил косметические правки и немного инфо для новых модемов.

проверил, в принципе не глючит.. да и глючить там нечему....
одно ток под вопросом:


doCommand $port "AT\^SYSCFG?" 2 "SYSCFG:"
ret=$?
if [ $ret == 0 ]; then
....
else
doCommand $port "AT\^SYSCFGEX?" 2 "SYSCFGEX:"

обычно *EX команда это расширение/дополнение обычной... но увы мне проверить нечем. да и вообще уж это не важно и так работает как должно.

Vampik
29-10-2012, 16:19
проверил, в принципе не глючит.. да и глючить там нечему....
одно ток под вопросом:


doCommand $port "AT\^SYSCFG?" 2 "SYSCFG:"
ret=$?
if [ $ret == 0 ]; then
....
else
doCommand $port "AT\^SYSCFGEX?" 2 "SYSCFGEX:"

обычно *EX команда это расширение/дополнение обычной... но увы мне проверить нечем. да и вообще уж это не важно и так работает как должно.

Тут кстати наоборот нужно было сделать: сначала пробовать команду с EX, если ответ - ERROR или COMMAND NOT SUPPORT, то пробовать команду без "EX" (так рекомендует сам Huawei).

Virtuals
29-10-2012, 17:12
укладывайте уж в релиз это.... работает ведь :)
да и имхо, может

td class="content_input_td"><input type="text" maxlength="256" class="content_input_fd" name="ussd" value="*100#"
сразу сделать?., ибо мало кто по памяти помнит другие запросы ;)

Vampik
29-10-2012, 20:54
укладывайте уж в релиз это.... работает ведь :)
да и имхо, может

td class="content_input_td"><input type="text" maxlength="256" class="content_input_fd" name="ussd" value="*100#"
сразу сделать?., ибо мало кто по памяти помнит другие запросы ;)

При наличии операторов, дерущих деньги за неправильные запросы - лучше по умолчанию ничего не ставить.

dlukanidin
29-10-2012, 21:02
Тут кстати наоборот нужно было сделать: сначала пробовать команду с EX, если ответ - ERROR или COMMAND NOT SUPPORT, то пробовать команду без "EX" (так рекомендует сам Huawei).

Абсолютно точно, но сделал именно так специально, т.к. от порядка зависит скорость выполнения и пока ИМХО старых модемов больше, то лучше впереди иметь старый вариант. К тому же там где есть новый, старый не работает, по крайней мере для 392 это так.

Что-то никак не могу смс получить с модема в консоли, вроде всё просто должно быть установить режим PDU AT+CMGF=1, получить все смс AT+CMGL=4. Режим устанавливает, а на получение смс ругается ERROR. Что- то упускаю, но никак не соображу что.

Virtuals
30-10-2012, 07:02
Что-то никак не могу смс получить с модема в консоли, вроде всё просто должно быть установить режим PDU AT+CMGF=1, получить все смс AT+CMGL=4.
Режим устанавливает, а на получение смс ругается ERROR. Что- то упускаю, но никак не соображу что.
AT+CMGL хавает иль цифру иль текст.... а насколько я вижу ты сам перевел режим на текст :)
перед применением всегда полезно спросить а что ваще можно: AT+CMGL=?

PS стопудов AT+CMGL="ALL" нужно.


Ну наконец-то (спустя полтора года) второй владелец объявился. Меня интересует vid & pid после определения в системе.
вам только vid & pid или всю инфу? в пр. раз чуток ошибся с режимом, там был модем+флешка (PID другой)
вот на всякий случай полная инфа

PS интересно а как нибудь можно и сетевую карту задействовать? и что это даст?

ConstAntz
30-10-2012, 13:15
PS интересно а как нибудь можно и сетевую карту задействовать?
Пока еще нет.

и что это даст?
особого прироста в скорости ждать не стоит, имхо.

На pid=1436 ussd запросы работают? У меня (в те времена) что-то барахлило.

Virtuals
30-10-2012, 13:39
На pid=1436 ussd запросы работают? У меня (в те времена) что-то барахлило.
с последними изменениями на ура :) я даж удивился как он ваще взлетел с таким количеством девайсов... но нет все без шума и пыли
определилось автоматом (кроме сетевой карты), так же автоматом разрулились номера сериальных портов (где дата, а где служебный).

PS прошивка на сегодня уж последняя. 1.9.2.7-rtn-r4686M


Пока еще нет. особого прироста в скорости ждать не стоит, имхо.
хм хотелось б попробовать... как я понимаю это нечто схожее с LTE у еты... тогда после инициализации линка сетевуха должна подрубится к прову...
по идее убирается лишний протокол ppp.

PS хотя прироста скорости на самом деле ждать не стоит :) ибо оператор как всегда лочит скорость... а для жалких 2-4мбит и ppp за глаза ;).,
думаю максимум это получим просто разгрузку проца.

dlukanidin
30-10-2012, 21:38
AT+CMGL хавает иль цифру иль текст.... а насколько я вижу ты сам перевел режим на текст :)
перед применением всегда полезно спросить а что ваще можно:
AT+CMGL=?

PS стопудов AT+CMGL="ALL" нужно.
Нет, AT+CMGL=? возвращает допустимые запросы (0-4)
AT+CMGF=0;AT+CMGL=4 возвращает OK, как будто просто нет сообщений, как я понимаю, а
AT+CMGF=1;AT+CMGL=4 возвращает ERROR, т.е. сообщения в кодировке PDU не поддерживаются, как я понимаю.
В то же время родная морда модема на винде показывает, что смски есть.

Разобрался, просто морда на винде их считывает и сразу с модема стирает.
Правильно AT+CMGF=0;AT+CMGL=4

Virtuals
31-10-2012, 02:29
.....
Правильно AT+CMGF=0;AT+CMGL=4
это правильно, как и другое...
надеюсь поможет вот последовательно выполнил:


AT+CMGF=0
OK


AT+CMGL=?
+CMGL: (0-4)
OK

AT+CMGF=1
OK

AT+CMGL=?
+CMGL: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL")
OK

AT+CMGL=4
ERROR

AT+CMGL="ALL"
+CMGL: 2,"REC READ","66971089711099101B",,"12/10/17,13:55:24+16"
04110430043B0430043D0441003A003200310030002C003500 3004400020003100300030002004420435043B0435043A0430 043D0430043B043E043200200432002004420435043B043504 44043E043D043500200432044104350433043E002004370430 002000380020044004430431002E002F04340435043D044C00 2C0020044204400430
..........
OK

AT+CMGF=0
OK
AT+CMGL=4
+CMGL: 2,1,,160
07919771430086F3400ED0C2303BEC1E971B00082101713155 42618C05000357020104110430043B0430043D0441003A0032 00310030002C00350030044000200031003000300020044204 35043B0435043A0430043D0430043B043E0432002004320020 04420435043B04350444043E043D0435002004320441043504 33043E002004370430002000380020044004430431002E002F 04340435043D044C002C0020044204400430
..........
OK

я прав :) после указания AT+CMGF=х стоит спросить AT+CMGL=?, дабы узнать что от нас ждут... иначе ошибка.

dlukanidin
31-10-2012, 06:19
это правильно, как и другое...
надеюсь поможет вот последовательно выполнил:


я прав :) после указания AT+CMGF=х стоит спросить AT+CMGL=?, дабы узнать что от нас ждут... иначе ошибка.

Да Вы правы, спасибо. Ещё бы понять при CMGF=1, ответ всегда в юникоде приходит? А то разбор сообщения в CMGF=0, довольно длинный, но там может быть и юникод и пду.

ryzhov_al
31-10-2012, 07:24
Да Вы правы, спасибо. Ещё бы понять при CMGF=1, ответ всегда в юникоде приходит? А то разбор сообщения в CMGF=0, довольно длинный, но там может быть и юникод и пду.Видимо, придётся налету определять UTF перед нами или PDU. В исходниках (http://smstools3.kekekasvi.com/index.php?p=packages) smstools3 есть ряд shell-скриптов для преобразования текста туда и обратно, из них можно позаимствовать лаконичный алгоритм для определения кодировки.

Virtuals
31-10-2012, 09:45
от shell-скриптов нужно уходить при разборе/формировании PDU, затраты времени и нагрузка на процессор просто недопустимы :( !!!

имху нужна простая утиль что съест ответ модема и вернет структурированный текст, и наоборот

PS помня эксперименты бурной молодости, еще с мобильниками... смотреть нужно только в сторону CMGF=0 этот режим жестко прописан... одно время у большинства вообще небыло режима текстового!. и когда он появился вышло как всегда кто в лес кто по дрова.

CMGF=1, ответ всегда в юникоде приходит? нет! бывает и просто английский текст в чистом виде.

ryzhov_al
31-10-2012, 09:48
от shell-скриптов нужно уходить при разборе/формировании PDU, затраты времени и нагрузка на процессор просто недопустимы :( !!!Не верю что перекодировка ста байт из одной текстовой кодировки в другую непосильна для процессора. Не верю потому, что проверял конвертацию в работе.

Update: вспомнил (http://habrahabr.ru/post/114271/) где проверял.

Virtuals
31-10-2012, 09:53
возьмите примеры выше.... они уже принимают смс.... вот ток с какими затратами :(.... несколько секунд 100% загрузки процессора.

PS на пр. страницах это обсуждалось уже.

dlukanidin
31-10-2012, 09:55
Не верю что перекодировка ста байт из одной текстовой кодировки в другую непосильна для процессора. Не верю потому, что проверял конвертацию в работе.

Я собственно не совсем понимаю причину спора, т.к. на скриптах всё уже сделано в этой ветке и даже кусок морды был написан для смс, только не помню где выкладывался.

Virtuals
31-10-2012, 09:57
http://wl500g.info/showthread.php?23712-%D1%EA%F0%E8%EF%F2-%F7%F2%E5%ED%E8%FF-%D1%CC%D1-%ED%E0-3G-%EC%EE%E4%E5%EC%E5-(ussd)&p=229173#post229173

Тестовая модификация state_modem с добавленными командами "m" и "d <sim_index>" для работы с смс-сообщениями модема. Результат конвертируется в UTF8 (для 9-ти сообщений затраты времени ~12 сек.) и выводится на stdout в хтмл-формате.

вот это мну и огорчает...

PS а спора тут нет. просто обсуждаем что и как лучше., да и в споре как известно рождается истина

ryzhov_al
31-10-2012, 10:21
...Результат конвертируется в UTF8 (для 9-ти сообщений затраты времени ~12 сек.) и выводится на stdout в хтмл-формате...вот это мну и огорчает...Те (http://wl500g-repo.googlecode.com/svn/ipkg/openwrt/golded-nsf_003-1_entware.ipk) фидошные скрипты перекодировки, что я упоминал, использовали готовые таблицы, записанные в виде файла. 6Кб скрипт плюс столько же - таблица.

Использовать его или не использовать и годится ли он вообще - решать вам.

Virtuals
31-10-2012, 10:24
тут проблема и затраты не в перекодировке... а в разборе самого PDU ... битовые операции...

ryzhov_al
31-10-2012, 10:36
тут проблема и затраты не в перекодировке... а в разборе самого PDU ... битовые операции...Тогда, на мой взгляд, преобразование PDU<->UTF необходимо выполнять на стороне браузера.

Virtuals
31-10-2012, 10:40
Тогда, на мой взгляд, преобразование PDU<->UTF необходимо выполнять на стороне браузера.

логично.... но а если хочется функционал sms и usd запросов использовать в скриптах? ;).
напр отправить смс на ваш номер мол "ой у мну тут инет по кабелю в конторе отрубили.... и денег на мобильном осталось 5 рублев, маловато для тарифа..."

PS боюсь тут без СИ кодинга не обойтись.

ryzhov_al
31-10-2012, 10:51
логично.... но а если хочется функционал sms и usd запросов использовать в скриптах? ;).Вы уж определитесь ©.
По идее, большинство популярных модемов должно поддерживать вывод в UCS, которая практически совпадает с UTF-16. Тогда не придётся делать побитовые операции:

AT+CSCS=?
+CSCS: ("IRA","GSM","UCS2")

OK
ATI
Manufacturer: ZTE CORPORATION
Model: MF631
Revision: BD_MF631F3V1.0.0B06
IMEI: 359ХХХХХХХХХХХХ
+GCAP: +CGSM,+DS,+ES

OK
Интересно, выбор кодировки работает только при чтении сообщений, или при написании тоже?

riselost
18-12-2012, 15:16
Всем привет! Товарищи, реально ли как то в прошивку интузиастов добавить PING определенного хоста через скажем каждые 10 секунд времени? Цель - понять, когда у меня дома пропадает свет или интернет. Я бы внес на раутере эту строчку, чтобы в фоне висел пинг и на получателе отлавливал бы эти пакеты. Если есть - то ок, нету - тоже все понятно. Либо отправку как то настроить емейла? Что на много! круче...
Тогда при поднятии канала я бы получал емейл на этот счет... Трудность в том, что IP динамический выдает 3G модем, а платить за постоянный IP желания большого нету...

ConstAntz
18-12-2012, 22:18
реально ли как то в прошивку энтузиастов добавить PING определенного хоста через скажем каждые 10 секунд времени?


while true; do ping -c 2 получатель; sleep 10s; done

alex_optek
07-01-2013, 15:17
Пока был установлен Е220, СМС всегда считывались.
Перешел на Е1820. Вижу вот это.


[root@RTN16 sbin]$ state_modem_sms 2.2 m
{"count":"0"}[root@RTN16 sbin]$

Если на время подключить Е220 и считать СМС, то после подключения Е1820 некоторое время СМС могут считываться, но не всегда.
Могу считывать в ББ, но неудобно.
Что делать?
Версии последние, исходные.
Кстати, VID/PID у них одинаковые 12d/1001