AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Статус Datacard после первого звонка становиться INUSE

Newbies/FAQ Forum 4 сообщений -
#1

Статус Datacard после первого звонка становиться INUSE


Добрый день.
Прикрутил к Asterisk 3 модема HUAWEI 1550.
И решил с помощью функции DEVICE_STATE в цикле проверят какой модем в данный момент свободен через тот и звонить.

Код:

exten=>s,1,Set(I=0)
exten=>s,n,While($[${I}s,n,Set(DEVICE="Dongle/datacard${I}")
exten=>s,n,Set(STATE=${DEVICE_STATE(Dongle/datacard${I})})
exten=>s,n,Verbose(The state is ${STATE})
exten=>s,n,GotoIf($["${STATE}"="NOT_INUSE"]?set_free_trunk,1)
exten=>s,n,Set(I=$[${I}+1])
exten=>s,n,EndWhile()


Сначала модем DEVICE_STATE определяет модем как NO_INUSE. Но после того как свободный модем найден по нему идет звонок. Но дело в том что после первого звонка, модем переходит в состояние INUSE, хотя dobgle show devices показывает что он FREE. Хотя звонки проходят без проблем. Помогает вернуть его в начальное состояние только полный перезапуск сервиса Asterisk. Версия Asterisk 1.8.10.1. версия chan-dongle-1.1.r14 Подскажите куда копать. Есть ли какое то решение этой проблемы?

_________________
Пользователь неадекватен.
#2

Изначально КОПАТЬ в ОТКАЗЕ от модемов. А уж потом ...
_________________
P4 3.0 + 1Gb CentOS 5.8 Aster 1.8.16
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.
#3

Это демо версия одного проекта. В будущем без модемов должно быть.
Вообщем сделал так. Вместо Device_state влепил строку exten=>s,n,Set(STATE=${SHELL(asterisk -rx "dongle show device state datacard${I}" | grep State |awk -F : '{print $2}'| tr -d "\n" | tr -d " ")})
Теперь вроде коррекно определяет. Может кому пригодиться
exten=>s,1,Set(I=0)
exten=>s,n,While($[${I}s,n,Set(DEVICE="Dongle/datacard${I}")
exten=>s,n,Set(STATE=${SHELL(asterisk -rx "dongle show device state datacard${I}" | grep State |awk -F : '{print $2}'| tr -d "\n" | tr -d " ")})
exten=>s,n,Verbose(The state is ${STATE})
exten=>s,n,GotoIf($["${STATE}"="Free"]?set_free_trunk,1)
exten=>s,n,Set(I=$[${I}+1])
exten=>s,n,EndWhile()

_________________
Пользователь неадекватен.
#4

Совет: Лучше использовать полные пути до бинарей когда используешь SHELL.
Код:
# whereis asterisk
asterisk: /usr/local/sbin/asterisk /usr/local/man/man8/asterisk.8.gz /usr/ports/net/asterisk

asterisk -> /usr/local/sbin/asterisk
Код:
# whereis grep
grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/src/gnu/usr.bin/grep

grep -> /usr/bin/grep
ну и т.д.